MySQL에서 SELECT 문의 결과를 다른 테이블에 그대로 삽입하고 싶다면, INSERT INTO ... SELECT 구문을 사용하면 됩니다. 이 방식은 기존 테이블의 데이터를 조건에 따라 필터링하면서 새로운 테이블로 복사할 때 매우 유용합니다.
이번 글에서는 실제 예제를 통해 두 개의 테이블을 만들고, SELECT 결과를 조건과 함께 다른 테이블에 삽입하는 과정을 단계별로 살펴보겠습니다.
1단계: 첫 번째 테이블 생성하기
먼저 예제에 사용할 첫 번째 테이블을 생성합니다. 아래 쿼리는 Id와 FirstName 두 컬럼을 가진 DemoTable1을 만듭니다.
mysql> create table DemoTable1
-> (
-> Id int,
-> FirstName varchar(20)
-> );
Query OK, 0 rows affected (0.71 sec)
2단계: 샘플 데이터 삽입하기
INSERT 명령어를 사용해 몇 개의 레코드를 추가합니다. 여기서는 의도적으로 NULL 값도 포함시켰습니다. 나중에 이 NULL 값이 어떻게 처리되는지 확인하기 위함입니다.
mysql> insert into DemoTable1 values(101,'Chris');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable1 values(NULL,'Bob');
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable1 values(NULL,NULL);
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable1 values(102,'David');
Query OK, 1 row affected (0.20 sec)
3단계: 테이블 데이터 확인하기
SELECT 문으로 DemoTable1의 전체 레코드를 조회해 보겠습니다.
mysql> select *from DemoTable1;
실행 결과는 다음과 같습니다.
+------+-----------+
| Id | FirstName |
+------+-----------+
| 101 | Chris |
| NULL | Bob |
| NULL | NULL |
| 102 | David |
+------+-----------+
4 rows in set (0.00 sec)
총 4개의 레코드가 저장되어 있으며, 일부 행에는 NULL 값이 들어 있는 것을 확인할 수 있습니다.
4단계: 두 번째 테이블 생성하기
이제 데이터를 복사해 넣을 대상 테이블인 DemoTable2를 생성합니다.
mysql> create table DemoTable2
-> (
-> StudentId int,
-> StudentName varchar(20)
-> );
Query OK, 0 rows affected (1.10 sec)
5단계: INSERT INTO SELECT로 조건부 삽입 실행하기
핵심 단계입니다. INSERT INTO ... SELECT 구문과 WHERE 절을 함께 사용하여, 원본 테이블에서 NULL 값이 없는 레코드만 새 테이블로 삽입해 보겠습니다.
mysql> insert into DemoTable2
-> select Id,FirstName from DemoTable1
-> where Id IS NOT NULL and FirstName IS NOT NULL;
Query OK, 2 rows affected (0.17 sec)
Records: 2 Duplicates: 0 Warnings: 0
WHERE 절에 IS NOT NULL 조건을 지정했기 때문에, Id와 FirstName 중 하나라도 NULL인 레코드는 제외되고 유효한 2개의 레코드만 삽입됩니다.
6단계: 최종 결과 확인하기
DemoTable2를 조회해 삽입된 데이터를 확인합니다.
mysql> select *from DemoTable2;
실행 결과는 다음과 같습니다.
+-----------+-------------+
| StudentId | StudentName |
+-----------+-------------+
| 101 | Chris |
| 102 | David |
+-----------+-------------+
2 rows in set (0.00 sec)
정리
이처럼 INSERT INTO ... SELECT 구문을 사용하면 한 테이블의 데이터를 다른 테이블로 손쉽게 복사할 수 있습니다. 여기에 WHERE 절을 조합하면 NULL 값 제거, 특정 조건 필터링 등 원하는 데이터만 선별적으로 이관할 수 있어, 데이터 마이그레이션이나 백업 작업 시 특히 유용합니다.