MySQL에서는 INSERT ... SELECT 구문을 사용하면 단 하나의 쿼리만으로 한 테이블의 열 값을 다른 테이블의 열로 간편하게 복사할 수 있습니다. 이번 글에서는 실제 예제를 통해 그 과정을 단계별로 살펴보겠습니다.
1. 첫 번째 테이블 생성하기
먼저 예제에 사용할 테이블을 생성합니다.
mysql> create table DemoTable1
(
Name varchar(100),
Gender ENUM('MALE','FEMALE')
);
Query OK, 0 rows affected (0.50 sec)Name(이름) 열은 문자열 타입으로, Gender(성별) 열은 ENUM 타입으로 정의했습니다.
2. 샘플 데이터 삽입하기
insert 명령어를 사용하여 테이블에 레코드를 추가합니다.
mysql> insert into DemoTable1 values('Chris','Male');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable1 values('Emma','Female');
Query OK, 1 row affected (0.19 sec)3. 삽입된 데이터 확인하기
select 문으로 테이블의 전체 레코드를 조회해 보겠습니다.
mysql> select *from DemoTable1;
위 쿼리는 다음과 같은 결과를 출력합니다.
+-------+--------+ | Name | Gender | +-------+--------+ | Chris | MALE | | Emma | FEMALE | +-------+--------+ 2 rows in set (0.00 sec)
4. 두 번째 테이블 생성하기
값을 복사해 넣을 대상 테이블을 생성합니다.
mysql> create table DemoTable2
(
EmployeeGender varchar(100)
);
Query OK, 0 rows affected (0.47 sec)5. 단일 쿼리로 열 값 복사하기
이제 INSERT와 SELECT를 결합한 단일 MySQL 쿼리로 한 테이블의 열 값을 다른 테이블로 복사해 보겠습니다.
mysql> insert into DemoTable2(EmployeeGender) select Gender from DemoTable1; Query OK, 2 rows affected (0.15 sec) Records: 2 Duplicates: 0 Warnings: 0
이 쿼리는 DemoTable1의 Gender 열에 있는 모든 값을 읽어 DemoTable2의 EmployeeGender 열에 그대로 삽입합니다. 실행 결과 2개의 행이 성공적으로 복사되었습니다.
6. 복사 결과 확인하기
select 문으로 대상 테이블의 전체 레코드를 조회합니다.
mysql> select *from DemoTable2;
위 쿼리는 다음과 같은 결과를 출력합니다.
+----------------+ | EmployeeGender | +----------------+ | MALE | | FEMALE | +----------------+ 2 rows in set (0.00 sec)
정리
INSERT INTO 대상테이블(열) SELECT 원본열 FROM 원본테이블; 형태의 구문을 사용하면 별도의 프로그램 로직 없이도 데이터베이스 내에서 열 값을 빠르고 효율적으로 복사할 수 있습니다. 조건이 필요한 경우 SELECT 절에 WHERE 절을 함께 사용하면 원하는 행만 선택적으로 복사하는 것도 가능합니다.