MySQL에서는 INSERT INTO ... SELECT 구문을 활용하면 하나의 쿼리만으로 첫 번째 테이블의 데이터를 두 번째 테이블에 삽입할 수 있습니다. 특히 전체 레코드가 아닌 특정 조건에 맞는 레코드만 옮기고 싶을 때 매우 유용합니다.
기본 문법
아래와 같이 SELECT 서브쿼리를 포함한 INSERT 문을 사용하면 됩니다.
INSERT INTO yourTableName2(yourColumnName1, yourColumnName2, .....N)
SELECT yourColumnName1, yourColumnName2, ....N FROM yourTableName1 WHERE yourCondition;
예제: 첫 번째 테이블 생성
먼저 예제를 위해 첫 번째 테이블을 생성해 보겠습니다.
mysql> create table DemoTable1
(
Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
Name varchar(40)
);
Query OK, 0 rows affected (0.88 sec)
레코드 삽입
INSERT 명령어를 사용해 몇 개의 레코드를 추가합니다.
mysql> insert into DemoTable1(Name) values('Chris');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable1(Name) values('David');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable1(Name) values('Bob');
Query OK, 1 row affected (0.12 sec)테이블 조회
SELECT 문으로 저장된 모든 레코드를 확인해 보겠습니다.
mysql> select *from DemoTable1;
실행 결과는 다음과 같습니다.
+----+-------+
| Id | Name |
+----+-------+
| 1 | Chris |
| 2 | David |
| 3 | Bob |
+----+-------+
3 rows in set (0.00 sec)
두 번째 테이블 생성
이제 데이터를 받아올 두 번째 테이블을 생성합니다.
mysql> create table DemoTable2
(
ClientId int,
ClientFirstName varchar(20)
);
Query OK, 0 rows affected (0.60 sec)
첫 번째 테이블에서 조건에 맞는 레코드만 삽입
다음 쿼리는 WHERE 절을 사용해 Id가 2가 아닌 레코드만 선택하여 두 번째 테이블에 삽입합니다.
mysql> insert into DemoTable2(ClientId, ClientFirstName)
select Id, Name from DemoTable1 where Id != 2;
Query OK, 2 rows affected (0.17 sec)
Records: 2 Duplicates: 0 Warnings: 0
결과 확인
두 번째 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> select *from DemoTable2;
실행 결과는 다음과 같습니다.
+----------+-----------------+
| ClientId | ClientFirstName |
+----------+-----------------+
| 1 | Chris |
| 3 | Bob |
+----------+-----------------+
2 rows in set (0.00 sec)
위 출력 결과를 보면 Id가 2인 'David' 레코드는 제외되고, 나머지 두 개의 레코드만 성공적으로 삽입된 것을 확인할 수 있습니다. 이처럼 WHERE 조건절과 함께 INSERT INTO ... SELECT 구문을 사용하면 원하는 레코드만 손쉽게 복사할 수 있습니다.