seo 검색바

자동 seo 컨설팅 받으러가기

Mysql SQL INSERT INTO SELECT 구문

by 넥스트티
2021년 8월 17일
mysql select




데이터 정제 시 자주 사용하는 SQL문으로 table 2의 데이터를 select 문으로 호출해서 table1에 삽입합니다.
경우에 따라서 where 절을 넣을 수도 있습니다.

id와 같이 자동증가하는 컬럼이 있다면 빼고 아래와 같이 넣으면 됩니다.

요점은 table1에 들어갈 table2의 컬럼 수를 동일 하게 작성하는 것입니다.

insert into table1 (id, url,da, blnum)
select id, url,da, blnum from table2
where url like ‘%next%’;

위 쿼리를 실행 전 select url,da, blnum from table2 where url like ‘%next%’; 문만 먼저 실행해보면 실행결과를 예상할 수 있습니다.

위에서 예를 들어 테이블 2개를 통합해서 한개의 테이블로 만든다면 id는 중복되어서 에러가 생길 수 있습니다.
이때 새로운 테이블에 미리 id가 자동증가로 정의 되어 있다면 id를 생략하고 다음과 같이 사용하면 됩니다.

insert into table1 (url,da, num )
select url,da, num from table2
where url like ‘%next%’;

ex) insert into 테이블명 (대분류, 핵심키워드, 핵키검색량, 키워드, 검색량)
select ‘java’,’java’,’40500′,키워드,검색량 from a_aa_oracle_refkwd
where id in (3,4,5)
지금 예는 대분류, 핵심키워드, 핵키검색량이라는 필드를 ‘java’,’java’,’40500’로 고정하고 나머지 값을 자동으로 넣는 예입니다.
실제로 많이 사용됩니다.

만약, table1과 table2가 완벽히 일치한다면 다음과 같이 사용할 수 있습니다.

insert into table1
select * from table2;
즉, 열구조가 동일하기에 컬럼을 모두 생략하는 것이 가능합니다.
위에 말씀드린 것처럼 데이터를 넣을 때 자동증가 id를 새로 만들고 싶다면
table1 id값을 자동증가로 정의한 후
위에 말씀드린 것처럼 id컬럼을 제외하고 나머지 컬럼만 넣으면 됩니다.
insert into table1 (url,da, num )
select url,da, num from table2
where url like ‘%next%’;

id컬럼 자동 증가를 위한 테이블 생성구문은 다음과 같습니다.

CREATE TABLE table1 (
id int(11) NOT NULL AUTO_INCREMENT,
url varchar(100) NOT NULL,
da varchar(300) NOT NULL,
num int(11) NOT NULL,
PRIMARY KEY (id)
)  AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

id 열에 AUTO_INCREMENT를 정의 하고 PRIMARY KEY (id)를 하단에 적어주면 됩니다.

 

테이블 a 에 키워드가 중첩된 값이 있어서 유니크한 값으로 다시 테이블을 정제하고자 할 경우는 다음과 같은 방법을 사용합니다.

insert into 테이블b (id, 대분류, 핵심키워드,핵키검색량, 키워드, 검색량)
SELECT distinct max(convert(id, int)), 대분류, 핵심키워드,핵키검색량, 키워드, 검색량 FROM 테이블a 
group by 키워드 order by 대분류,핵심키워드,convert(검색량, int) desc;

즉, 현재 테이블a와 같은 테이블b를 만들어놓고 테이블 a를 GROUP BY 키워드 구문을 사용해서 대표 값만 가져오고
대표값을 가져올 때 id값은 가장 큰값으로 가져오게 하기 위해 max 함수를 사용했습니다.
그리고 , 숫자는 max, order by 검색량 등으로 가져오면 되지만 
엑셀 데이터로 바로 넣을 경우, 텍스트문으로 적용될 경우가 많음으로
convert(id, int), convert(검색량, int) 이렇게 int 형으로 형변환을 시켰습니다.
상황에 따라서 사용하지 않아도 됩니다.

관련포스트

테이블 조인
업데이트(update) 시 테이블 조인(table join) 구문

UPDATE tablea a INNER JOIN tableb b ON a.키워드=b.키워드 SET a.검색량=b.검색량 WHERE b.검색량 > 100 위의 예는 A테이블과 B테이블을 조인해서 B테이블의 검색량이 100 이상인 것만 A테이블의 검색량을 업데이트 하는 구문입니다. 업데이트... more

자동증가
Mysql 자동증가(auto increment) 및 프라이머리키(primary key) 컬럼 추가

테이블을 조정할 경우,  많이 사용됩니다. 구문은 다음과 같습니다. ALTER TABLE 테이블명 ADD COLUMN 컬럼명 INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST; 컬럼 삽입 시 위치 여기에서 FIRST는 테이블에서 제일 처음으로 컬럼을... more

case when then
Mysql CASE WHEN THEN 구문

데이터 정제 시 컬럼의 조건에 따라서 다른 컬럼의 값을 업데이트 해줘야 할 경우가 있습니다. 이 경우, 사용하는 구문이 CASE 구문입니다. 구문의 기본형식은 다음과 같습니다. CASE WHEN 조건 THEN '반환 값' WHEN 조건 THEN '반환... more