INSERT INTO SELECT 구문은 SELECT 쿼리의 결과를 가지고 테이블에 데이터를 삽입할 수 있게 해주는 쿼리입니다.
기본 구조
INSERT INTO [테이블명] (컬럼1, 컬럼2, ... )
SELECT 컬럼1, 컬럼2 .. FROM [테이블명]
WHERE [조건]
INSERT 구문과 SELECT 구문이 합쳐진 형태입니다.
주의할 점은 INSERT 컬럼의 개수와 SELECT 결과 컬럼의 개수와 각 컬럼의 타입이 같아야 합니다.
자세한 내용은 예제를 통해 설명드리겠습니다.
예제
예제에 사용할 테이블을 생성합니다.
create table city_population (
id int(11) not null auto_increment primary key comment 'key',
country_code char(3) not null comment '국가 코드',
name char(35) not null comment '도시명',
population int(11) not null comment '인구수'
);
샘플 데이터베이스의 city 테이블을 사용해서 INSERT INTO SELECT 구문을 실행하겠습니다.
SELECT 전체 데이터 등록
insert into city_population (country_code, name, population)
select CountryCode, Name, Population from city
city 테이블의 국가 코드, 도시명, 인구수를 SELECT로 조회해서 city_population 테이블에 INSERT 하였습니다.
SELECT 조건 조회 후 등록
SELECT에 조건을 적용하여 등록할 수 있습니다.
insert into city_population (country_code, name, population)
select CountryCode, Name, Population
from city
where CountryCode = 'KOR';
city 테이블에서 국가코드가 'KOR'인 데이터만 등록하였습니다.
WHERE 외에도 JOIN, GROUP BY 절 등을 사용할 수 있습니다.
상수 등록
특정 컬럼에 고정된 값을 넣어주고싶을 때 상수를 사용할 수 있습니다.
insert into city_population (country_code, name, population)
select 'AAA', Name, Population
from city
where CountryCode = 'KOR';