MySQL에서는 INSERT INTO ... SELECT 구문을 사용하면 하나의 쿼리만으로 첫 번째 테이블의 값을 조회하여 두 번째 테이블에 바로 삽입할 수 있습니다. 아래 예제를 통해 전체 과정을 단계별로 살펴보겠습니다.
1. 첫 번째 테이블 생성
먼저 DemoTable1이라는 테이블을 생성합니다.
mysql> create table DemoTable1(
Value int
);
Query OK, 0 rows affected (0.65 sec)
2. 첫 번째 테이블에 데이터 삽입
insert 명령을 사용해 테이블에 레코드를 추가합니다.
mysql> insert into DemoTable1 values(67);
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable1 values(46);
Query OK, 1 row affected (0.11 sec)
select 문으로 테이블의 모든 레코드를 확인해 보겠습니다.
mysql> select *from DemoTable1;
실행 결과는 다음과 같습니다.
+-------+
| Value |
+-------+
| 67 |
| 46 |
+-------+
2 rows in set (0.00 sec)
3. 두 번째 테이블 생성
값을 삽입할 대상인 두 번째 테이블을 생성합니다.
mysql> create table DemoTable2(
Score int
);
Query OK, 0 rows affected (0.70 sec)
4. 단일 쿼리로 값 복사하기
핵심은 INSERT INTO ... SELECT 구문입니다. 이 구문을 사용하면 SELECT 결과를 그대로 다른 테이블에 삽입할 수 있어, 별도의 애플리케이션 로직 없이 데이터베이스 내에서 데이터를 손쉽게 복사할 수 있습니다.
mysql> insert into DemoTable2(Score) select Value from DemoTable1;
Query OK, 2 rows affected (0.13 sec)
Records: 2 Duplicates: 0 Warnings: 0
위 쿼리는 DemoTable1의 Value 컬럼 값을 읽어 DemoTable2의 Score 컬럼에 그대로 삽입합니다. 실행 결과 2개의 레코드가 성공적으로 삽입된 것을 확인할 수 있습니다.
5. 결과 확인
select 문으로 두 번째 테이블의 모든 레코드를 조회합니다.
mysql> select *from DemoTable2;
실행 결과는 다음과 같습니다.
+-------+
| Score |
+-------+
| 67 |
| 46 |
+-------+
2 rows in set (0.00 sec)
정리
이처럼 INSERT INTO 대상테이블(컬럼) SELECT 컬럼 FROM 원본테이블 형태의 단일 쿼리를 사용하면, 조건(WHERE), 정렬(ORDER BY) 등을 함께 적용하면서 테이블 간 데이터를 빠르고 효율적으로 복사할 수 있습니다. 대량의 데이터를 이동할 때도 애플리케이션을 거치지 않고 데이터베이스 내부에서 처리되므로 성능 면에서 매우 유리합니다.