Study/DB

[MySQL] INSERT INTO SELECT 기본 사용법 및 예제

 

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

INSERT INTO SELECT 쿼리 실행 결과
INSERT INTO SELECT 쿼리 실행 결과

 

city 테이블의 국가 코드, 도시명, 인구수를 SELECT로 조회해서 city_population 테이블에 INSERT 하였습니다.

 

SELECT 조건 조회 후 등록

SELECT에 조건을 적용하여 등록할 수 있습니다.

insert into city_population (country_code, name, population) 
select CountryCode, Name, Population 
from city 
where CountryCode = 'KOR';

INSERT INTO SELECT 조건 적용 결과
INSERT INTO SELECT 조건 적용 결과

city 테이블에서 국가코드가 'KOR'인 데이터만 등록하였습니다.

 

WHERE 외에도 JOIN, GROUP BY 절 등을 사용할 수 있습니다. 

 

상수 등록

특정 컬럼에 고정된 값을 넣어주고싶을 때 상수를 사용할 수 있습니다.

insert into city_population (country_code, name, population) 
select 'AAA', Name, Population 
from city 
where CountryCode = 'KOR';

INSERT INTO SELECT 상수 등록 결과
INSERT INTO SELECT 상수 등록 결과