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

MySQL UNION으로 두 테이블을 병합하여 새 테이블 만드는 방법

MySQL에서는 UNION 연산자와 CREATE TABLE 문을 함께 사용하면 두 개의 테이블 데이터를 하나로 병합한 새로운 테이블을 손쉽게 만들 수 있습니다.

기본 문법

두 테이블을 병합하여 새 테이블을 생성하는 기본 문법은 다음과 같습니다.

create table yourTableName
(
   select *from yourTableName1
)
UNION
(
   select *from yourTableName2
);

UNION은 두 SELECT 결과를 합치면서 중복된 행을 자동으로 제거합니다. 중복을 유지하고 싶다면 UNION 대신 UNION ALL을 사용하면 됩니다. 단, 병합하려는 두 테이블은 컬럼의 개수와 순서가 일치해야 합니다.

예제 테이블 생성하기

먼저 첫 번째 테이블을 생성하는 쿼리입니다.

mysql> create table Old_TableDemo
   -> (
   -> UserId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
   -> UserName varchar(20)
   -> );
Query OK, 0 rows affected (0.63 sec)

이어서 두 번째 테이블을 생성합니다.

mysql> create table Old_TableDemo2
   -> (
   -> UserId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
   -> UserName varchar(20)
   -> );
Query OK, 0 rows affected (0.60 sec)

데이터 삽입 및 확인

INSERT 명령으로 첫 번째 테이블에 레코드를 추가합니다.

mysql> insert into Old_TableDemo(UserName) values('John');
Query OK, 1 row affected (0.22 sec)
mysql> insert into Old_TableDemo(UserName) values('Carol');
Query OK, 1 row affected (0.15 sec)

SELECT 문으로 첫 번째 테이블의 모든 레코드를 조회해 보겠습니다.

mysql> select *from Old_TableDemo;

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

+--------+----------+
| UserId | UserName |
+--------+----------+
|      1 | John     |
|      2 | Carol    |
+--------+----------+
2 rows in set (0.00 sec)

같은 방식으로 두 번째 테이블에도 레코드를 삽입합니다.

mysql> insert into Old_TableDemo2(UserName) values('Larry');
Query OK, 1 row affected (0.22 sec)
mysql> insert into Old_TableDemo2(UserName) values('Sam');
Query OK, 1 row affected (0.10 sec)

두 번째 테이블의 전체 레코드를 확인합니다.

mysql> select *from Old_TableDemo2;

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

+--------+----------+
| UserId | UserName |
+--------+----------+
|      1 | Larry    |
|      2 | Sam      |
+--------+----------+
2 rows in set (0.00 sec)

UNION으로 병합된 새 테이블 생성

이제 UNION을 사용해 두 테이블을 병합한 새 테이블을 생성하는 쿼리입니다.

mysql> create table UserTableDemo
   -> (
   -> select *from Old_TableDemo
   -> )
   -> UNION
   -> (
   -> select *from Old_TableDemo2
   -> );
Query OK, 4 rows affected (1.18 sec)
Records: 4 Duplicates: 0 Warnings: 0

새로 생성된 테이블의 레코드를 조회해 보겠습니다.

mysql> select *from UserTableDemo;

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

+--------+----------+
| UserId | UserName |
+--------+----------+
|      1 | John     |
|      2 | Carol    |
|      1 | Larry    |
|      2 | Sam      |
+--------+----------+
4 rows in set (0.00 sec)

위 결과에서 볼 수 있듯이, 두 테이블의 데이터가 모두 새 테이블에 병합되었습니다. 참고로 이 방식으로 생성된 테이블에는 원본 테이블의 PRIMARY KEY나 AUTO_INCREMENT 속성이 그대로 이전되지 않으므로, 필요하다면 ALTER TABLE로 인덱스와 제약 조건을 별도로 추가하는 것이 좋습니다.