MySQL에서 한 테이블에 저장된 데이터를 다른 테이블로 옮기고 싶을 때는 INSERT INTO SELECT 문을 사용하면 됩니다. 이 문장은 SELECT 쿼리로 조회한 결과를 그대로 다른 테이블에 삽입해 주기 때문에, 대량의 데이터를 복사하거나 테이블 간 데이터를 이전할 때 매우 유용합니다.
아래 예제를 통해 실제 사용 방법을 단계별로 살펴보겠습니다.
1단계: 첫 번째 테이블 생성
먼저 원본 데이터가 담길 첫 번째 테이블을 생성합니다.
mysql> create table DemoTable1
-> (
-> Id int,
-> FirstName varchar(20)
-> );
Query OK, 0 rows affected (0.49 sec)2단계: 첫 번째 테이블에 데이터 삽입
INSERT 명령어를 사용해 샘플 레코드를 추가합니다.
mysql> insert into DemoTable1 values(101,'Adam'); Query OK, 1 row affected (0.12 sec) mysql> insert into DemoTable1 values(102,'John'); Query OK, 1 row affected (0.11 sec)
3단계: 데이터 확인
SELECT 문으로 테이블에 저장된 모든 레코드를 확인해 보겠습니다.
mysql> select *from DemoTable1;
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
+------+-----------+ | Id | FirstName | +------+-----------+ | 101 | Adam | | 102 | John | +------+-----------+ 2 rows in set (0.00 sec)
4단계: 두 번째 테이블 생성
이번에는 데이터를 받아올 두 번째 테이블을 생성합니다. 컬럼 이름은 달라도 되며, 데이터 타입만 호환되면 됩니다.
mysql> create table DemoTable2
-> (
-> EmployeeId int,
-> EmployeeName varchar(20)
-> );
Query OK, 0 rows affected (0.42 sec)5단계: INSERT INTO SELECT로 데이터 복사
다음 쿼리가 바로 한 테이블에서 다른 테이블로 데이터를 삽입하는 핵심 부분입니다. SELECT 절의 컬럼 순서와 INSERT 절의 컬럼 순서를 일치시켜 주는 것이 중요합니다.
mysql> insert into DemoTable2(EmployeeId,EmployeeName) select Id,FirstName from DemoTable1; Query OK, 2 rows affected (0.15 sec) Records: 2 Duplicates: 0 Warnings: 0
실행 결과 2개의 레코드가 성공적으로 삽입된 것을 확인할 수 있습니다.
6단계: 결과 확인
두 번째 테이블의 데이터를 SELECT 문으로 조회해 보겠습니다.
mysql> select *from DemoTable2;
실행 결과는 다음과 같습니다.
+------------+--------------+ | EmployeeId | EmployeeName | +------------+--------------+ | 101 | Adam | | 102 | John | +------------+--------------+ 2 rows in set (0.00 sec)
참고 사항
INSERT INTO SELECT 문은 WHERE 절을 함께 사용하여 특정 조건에 맞는 데이터만 선택적으로 복사할 수도 있습니다. 또한 대상 테이블의 컬럼 개수와 데이터 타입이 소스 테이블의 선택된 컬럼과 호환되어야 오류 없이 실행됩니다.