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

MySQL UNION으로 두 테이블 데이터를 단일 쿼리로 조회하는 방법

MySQL UNION으로 두 테이블 데이터를 단일 쿼리로 조회하기

MySQL에서는 UNION 연산자를 사용하면 여러 SELECT 문의 결과를 하나의 결과 집합으로 합쳐서 반환할 수 있습니다. 이번 글에서는 두 개의 테이블을 생성한 뒤, 단일 쿼리로 두 테이블의 데이터를 동시에 조회하는 방법을 단계별로 살펴보겠습니다.

1. 첫 번째 테이블 생성

먼저 DemoTable1이라는 이름의 테이블을 생성합니다.

mysql> create table DemoTable1
(
    Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    FirstName varchar(20)
);
Query OK, 0 rows affected (0.90 sec)

2. 첫 번째 테이블에 데이터 삽입

INSERT 명령어를 사용해 샘플 레코드를 추가합니다.

mysql> insert into DemoTable1(FirstName) values('Chris');
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable1(FirstName) values('Adam');
Query OK, 1 row affected (0.21 sec)
mysql> insert into DemoTable1(FirstName) values('Sam');
Query OK, 1 row affected (0.16 sec)

3. 첫 번째 테이블 데이터 확인

SELECT 문으로 저장된 모든 레코드를 조회해 보겠습니다.

mysql> select *from DemoTable1;

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

+----+-----------+
| Id | FirstName |
+----+-----------+
|  1 | Chris     |
|  2 | Adam      |
|  3 | Sam       |
+----+-----------+
3 rows in set (0.00 sec)

4. 두 번째 테이블 생성 및 데이터 삽입

같은 구조로 DemoTable2를 생성하고 레코드를 삽입합니다.

mysql> create table DemoTable2(
    Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    FirstName varchar(20)
);
Query OK, 0 rows affected (1.75 sec)
mysql> insert into DemoTable2(FirstName) values('John');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable2(FirstName) values('Tom');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable2(FirstName) values('Bob');
Query OK, 1 row affected (0.50 sec)

DemoTable2의 데이터도 확인해 보겠습니다.

+----+-----------+
| Id | FirstName |
+----+-----------+
|  1 | John      |
|  2 | Tom       |
|  3 | Bob       |
+----+-----------+
3 rows in set (0.00 sec)

5. UNION으로 두 테이블 한 번에 조회하기

이제 UNION 연산자를 사용해 두 테이블의 데이터를 하나의 쿼리로 조회하고, ORDER BY 절로 FirstName 기준 오름차순 정렬까지 적용해 보겠습니다.

mysql> (select *from DemoTable1)
    union
    (select *from DemoTable2)
    order by FirstName;

실행하면 두 테이블의 모든 레코드가 하나의 결과 집합으로 합쳐져 출력됩니다.

+----+-----------+
| Id | FirstName |
+----+-----------+
|  2 | Adam      |
|  3 | Bob       |
|  1 | Chris     |
|  1 | John      |
|  3 | Sam       |
|  2 | Tom       |
+----+-----------+
6 rows in set (0.00 sec)

정리

UNION은 각 SELECT 문의 컬럼 수와 데이터 타입이 일치할 때 사용할 수 있으며, 기본적으로 중복된 행을 제거한 결과를 반환합니다. 중복 행까지 모두 포함하고 싶다면 UNION ALL을 사용하면 됩니다. 또한 ORDER BY 절은 전체 UNION 결과에 대해 마지막에 한 번만 적용한다는 점도 기억해 두면 좋습니다.