Mysql SQL INSERT INTO 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 형으로 형변환을 시켰습니다.
상황에 따라서 사용하지 않아도 됩니다.