Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 UNION과 CREATE TABLE AS 문으로 두 테이블 데이터 합치기

MySQL에서 UNION과 CREATE TABLE AS 문으로 두 테이블 데이터 합치기

MySQL에서는 UNION 연산자와 CREATE TABLE AS(CTAS) 문을 함께 사용하면 여러 테이블에 흩어져 있는 데이터를 하나의 새 테이블로 손쉽게 통합할 수 있습니다. 특히 각 행이 어느 원본 테이블에서 왔는지 식별할 수 있도록 별도의 컬럼을 함께 정의하면 관리가 한결 편리해집니다. 아래 예제를 통해 전체 과정을 단계별로 살펴보겠습니다.

1단계: 첫 번째 테이블 생성 및 데이터 삽입

먼저 첫 번째 테이블을 생성합니다.

mysql> create table DemoTable1(FirstName varchar(1000));
Query OK, 0 rows affected (1.22 sec)

INSERT 명령을 사용해 테이블에 레코드를 추가합니다.

mysql> insert into DemoTable1 values('John');
Query OK, 1 row affected (0.20 sec)

SELECT 문으로 테이블의 모든 레코드를 조회합니다.

mysql> select *from DemoTable1;

실행 결과는 다음과 같습니다.

+-----------+
| FirstName |
+-----------+
| John |
+-----------+
1 row in set (0.02 sec)

2단계: 두 번째 테이블 생성 및 데이터 삽입

이어서 두 번째 테이블을 생성하는 쿼리입니다.

mysql> create table DemoTable2(FirstName varchar(100));
Query OK, 0 rows affected (0.81 sec)

마찬가지 방법으로 레코드를 삽입합니다.

mysql> insert into DemoTable2 values('Chris');
Query OK, 1 row affected (0.21 sec)

SELECT 문으로 데이터를 확인합니다.

mysql> select *from DemoTable2;

실행 결과는 다음과 같습니다.

+-----------+
| FirstName |
+-----------+
| Chris |
+-----------+
1 row in set (0.00 sec)

3단계: CREATE TABLE AS와 UNION으로 두 테이블 결합하기

이제 CREATE TABLE AS 문과 UNION을 사용해 두 테이블의 데이터를 하나의 새 테이블(DemoTable3)로 통합합니다. 이때 각 SELECT 절에 문자열 리터럴을 TABLE_NAME이라는 별칭 컬럼으로 추가하면, 어떤 행이 어느 원본 테이블에서 가져온 것인지 쉽게 구분할 수 있습니다.

mysql> create table DemoTable3 AS
    (
      select FirstName, 'DemoTable1' AS `TABLE_NAME` from DemoTable1)
      union
    (
    select FirstName, 'DemoTable2' AS `TABLE_NAME` from DemoTable2);
Query OK, 2 rows affected (1.08 sec)
Records: 2 Duplicates: 0 Warnings: 0

새로 생성된 DemoTable3의 모든 레코드를 조회해 보겠습니다.

mysql> select *from DemoTable3;

실행 결과는 다음과 같습니다.

+-----------+--------------+
| FirstName | TABLE_NAME |
+-----------+--------------+
| John | DemoTable1 |
| Chris | DemoTable2 |
+-----------+--------------+
2 rows in set (0.00 sec)

참고 사항

UNION은 기본적으로 중복된 행을 제거하므로, 두 테이블에 동일한 값이 존재하더라도 모든 행을 그대로 유지하고 싶다면 UNION ALL을 사용하는 것이 좋습니다. 또한 CTAS 문은 새 테이블의 컬럼 타입과 이름을 SELECT 결과로부터 자동으로 상속받기 때문에, 인덱스나 기본키 등의 제약 조건이 필요하다면 테이블 생성 후 별도로 추가해야 한다는 점도 기억해 두세요.