MySQL에서는 INSERT ... SELECT 구문을 사용하면 한 테이블에서 특정 필드를 조회한 결과를 그대로 다른 테이블에 삽입할 수 있습니다. 조건(WHERE 절)을 함께 사용하면 원하는 행만 골라서 복사하는 것도 가능합니다.
아래 예제를 통해 실제 동작 과정을 단계별로 살펴보겠습니다.
1. 첫 번째 테이블 생성
먼저 예제에 사용할 테이블을 생성합니다.
mysql> create table DemoTable1 -> ( -> StudentId int, -> StudentName varchar(20) -> ); Query OK, 0 rows affected (0.64 sec)
2. 첫 번째 테이블에 데이터 삽입
INSERT 명령을 사용해 샘플 레코드를 추가합니다.
mysql> insert into DemoTable1 values(10,'John'); Query OK, 1 row affected (0.15 sec) mysql> insert into DemoTable1 values(11,'Chris'); Query OK, 1 row affected (0.15 sec)
3. 저장된 데이터 확인
SELECT 문으로 테이블의 전체 레코드를 조회합니다.
mysql> select *from DemoTable1;
출력 결과
+-----------+-------------+ | StudentId | StudentName | +-----------+-------------+ | 10 | John | | 11 | Chris | +-----------+-------------+ 2 rows in set (0.00 sec)
4. 두 번째 테이블 생성
데이터를 삽입할 대상 테이블을 생성합니다. 이때 컬럼 이름과 크기가 달라도 데이터 타입이 호환되면 정상적으로 삽입됩니다.
mysql> create table DemoTable2 -> ( -> CustomerId int, -> CustomerName varchar(100) -> ); Query OK, 0 rows affected (0.82 sec)
5. SELECT 결과를 다른 테이블에 INSERT
핵심 쿼리입니다. DemoTable1에서 StudentId = 11인 학생의 데이터를 조회하여 DemoTable2의 CustomerId, CustomerName 컬럼에 삽입합니다.
mysql> insert into DemoTable2(CustomerId,CustomerName) select StudentId,StudentName from DemoTable1 where StudentId=11; Query OK, 1 row affected (0.20 sec) Records: 1 Duplicates: 0 Warnings: 0
위 쿼리의 구조를 살펴보면 다음과 같습니다.
- INSERT INTO 대상테이블(컬럼1, 컬럼2) : 값을 넣을 테이블과 컬럼을 지정
- SELECT 컬럼1, 컬럼2 FROM 원본테이블 : 복사할 데이터를 조회
- WHERE 조건 : 특정 행만 선택적으로 삽입
6. 두 번째 테이블의 데이터 확인
DemoTable2를 다시 조회하면 WHERE 조건에 해당하는 레코드만 삽입된 것을 확인할 수 있습니다.
mysql> select *from DemoTable2;
출력 결과
+------------+--------------+ | CustomerId | CustomerName | +------------+--------------+ | 11 | Chris | +------------+--------------+ 1 row in set (0.00 sec)
정리
이처럼 INSERT INTO ... SELECT 구문을 활용하면 테이블 간 데이터 복사가 매우 간편해집니다. WHERE 절로 필요한 데이터만 선별하거나, WHERE 절을 생략하면 전체 레코드를 한 번에 옮길 수도 있습니다. 단, 양쪽 테이블의 컬럼 개수와 데이터 타입이 호환되어야 하므로 실행 전에 스키마를 확인하는 것이 좋습니다.