개요
MySQL에서 한 테이블의 데이터를 다른 테이블로 복사하면서, 원본 테이블에 없는 열에는 고정된 값을 직접 지정해야 하는 경우가 자주 있습니다. 이때 INSERT INTO ... SELECT 문을 활용하면 간단하게 해결할 수 있습니다.
핵심은 SELECT 절에서 복사할 열과 함께 리터럴 값(예: 숫자, 문자열)을 함께 선택하는 것입니다. 이렇게 하면 대상 테이블의 모든 열에 값이 채워지게 됩니다.
1. 첫 번째 테이블 생성하기
먼저 예제에 사용할 테이블을 생성합니다. 다음 쿼리를 실행하세요.
mysql> create table insertOneToAnotherTable
-> (
-> Value int
-> );
Query OK, 0 rows affected (0.60 sec)
2. 첫 번째 테이블에 데이터 삽입하기
INSERT 명령을 사용하여 몇 개의 레코드를 삽입합니다.
mysql> insert into insertOneToAnotherTable values(100);
Query OK, 1 row affected (0.08 sec)
mysql> insert into insertOneToAnotherTable values(200);
Query OK, 1 row affected (0.15 sec)
mysql> insert into insertOneToAnotherTable values(300);
Query OK, 1 row affected (0.13 sec)
mysql> insert into insertOneToAnotherTable values(400);
Query OK, 1 row affected (0.15 sec)
mysql> insert into insertOneToAnotherTable values(500);
Query OK, 1 row affected (0.12 sec)
mysql> insert into insertOneToAnotherTable values(600);
Query OK, 1 row affected (0.16 sec)
SELECT 문으로 저장된 모든 레코드를 확인해 보겠습니다.
mysql> select * from insertOneToAnotherTable;
실행 결과는 다음과 같습니다.
+-------+
| Value |
+-------+
| 100 |
| 200 |
| 300 |
| 400 |
| 500 |
| 600 |
+-------+
6 rows in set (0.00 sec)
3. 두 번째 테이블 생성하기
이번에는 두 개의 열을 가진 두 번째 테이블을 생성합니다.
mysql> create table recieveDateFromTable
-> (
-> Value1 int,
-> Value2 int
-> );
Query OK, 0 rows affected (0.83 sec)
4. INSERT INTO ... SELECT로 데이터 복사 및 고정값 설정
이제 핵심 단계입니다. 한 테이블에서 다른 테이블로 데이터를 삽입하면서, 특정 열의 값을 직접 지정하는 쿼리는 다음과 같습니다.
mysql> insert into recieveDateFromTable(Value1,Value2) select Value,1000 from insertOneToAnotherTable;
Query OK, 6 rows affected (0.14 sec)
Records: 6 Duplicates: 0 Warnings: 0
여기서 주목할 부분은 SELECT 절의 1000입니다. 이 상수 값이 대상 테이블의 Value2 열에 모든 행에 대해 동일하게 삽입됩니다. 즉, 원본 테이블의 Value 열 값은 Value1로 복사되고, 고정값 1000은 Value2에 설정됩니다.
5. 결과 확인하기
두 번째 테이블의 모든 레코드를 조회하여 결과를 확인해 보겠습니다.
mysql> select * from recieveDateFromTable;
실행 결과는 다음과 같습니다.
+--------+--------+
| Value1 | Value2 |
+--------+--------+
| 100 | 1000 |
| 200 | 1000 |
| 300 | 1000 |
| 400 | 1000 |
| 500 | 1000 |
| 600 | 1000 |
+--------+--------+
6 rows in set (0.00 sec)
정리
위 예제에서 확인했듯이, INSERT INTO ... SELECT 문에서 SELECT 절에 리터럴 값을 추가하면 원본 테이블의 데이터와 함께 고정된 값을 새 테이블에 삽입할 수 있습니다. 이 기법은 데이터 마이그레이션, 백업 테이블 생성, 로그 기록 시 일괄적인 상태값 지정 등 다양한 상황에서 유용하게 활용됩니다.