INSERT 문에 SELECT 질의를 사용하면 하나 이상의 다른 테이블로부터 특정 검색 조건을 만족하는 데이터를 추출하여 대상 테이블에 삽입할 수 있다.
SELECT 문은 VALUES 키워드 대신 사용하거나 VALUES 뒤의 컬럼 값 리스트 내에 부질의로서 포함될 수 있다. VALUES 키워드를 대신하여 SELECT 문을 명시하면, 질의 결과로 얻은 다수의 레코드를 한 번에 대상 테이블 컬럼에 삽입할 수 있다. SELECT 문을 컬럼 값 리스트 내에 부질의로 사용하려면 질의 결과 레코드가 하나여야 한다.
INSERT [INTO] table_name [(column_name, ...)]
SELECT...
[ON DUPLICATE KEY UPDATE column_name = expr, ... ]
--creating an empty table which schema replicated from a_tbl1
CREATE TABLE a_tbl2 LIKE a_tbl1;
--inserting multiple rows from SELECT query results
INSERT INTO a_tbl2 SELECT * FROM a_tbl1 WHERE id IS NOT NULL;
--inserting column value with SELECT subquery specified in the value list
INSERT INTO a_tbl2 VALUES(8, SELECT name FROM a_tbl1 WHERE name <'bbb', DEFAULT);
SELECT * FROM a_tbl2;
id name phone
=========================================================
1 'aaa' '000-0000'
2 'bbb' '000-0000'
3 'ccc' '333-3333'
4 NULL '000-0000'
5 NULL '000-0000'
6 'eee' '000-0000'
7 NULL '777-7777'
8 'aaa' '000-0000'