개요
서로 다른 두 개의 테이블에 있는 각각의 열 값을 하나의 결과로 합쳐서 정렬된 형태로 출력하고 싶다면, UNION 연산자와 ORDER BY 절을 함께 사용하면 됩니다. UNION은 여러 SELECT 문의 결과를 하나로 결합하며, 마지막에 ORDER BY를 붙이면 전체 결과를 원하는 기준으로 정렬할 수 있습니다.
아래에서 예제 테이블을 만들고 실제 동작 과정을 단계별로 살펴보겠습니다.
1. 첫 번째 테이블 생성
먼저 Amount라는 열을 가진 DemoTable1 테이블을 생성합니다.
mysql> create table DemoTable1
(
Amount int
);
Query OK, 0 rows affected (0.63 sec)
2. 첫 번째 테이블에 데이터 삽입
INSERT 명령을 사용해 몇 개의 레코드를 추가합니다.
mysql> insert into DemoTable1 values(234);
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable1 values(567);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable1 values(134);
Query OK, 1 row affected (0.43 sec)
SELECT 문으로 저장된 레코드를 확인합니다.
mysql> select *from DemoTable1;
실행 결과는 다음과 같습니다.
+--------+
| Amount |
+--------+
| 234 |
| 567 |
| 134 |
+--------+
3 rows in set (0.00 sec)
3. 두 번째 테이블 생성 및 데이터 삽입
이번에는 Price라는 열을 가진 DemoTable2 테이블을 생성합니다.
mysql> create table DemoTable2
(
Price int
);
Query OK, 0 rows affected (0.73 sec)
마찬가지로 INSERT 명령으로 레코드를 삽입합니다.
mysql> insert into DemoTable2 values(134);
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable2 values(775);
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable2 values(121);
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable2 values(882);
Query OK, 1 row affected (0.09 sec)
SELECT 문으로 테이블 내용을 확인합니다.
mysql> select *from DemoTable2;
실행 결과는 다음과 같습니다.
+-------+
| Price |
+-------+
| 134 |
| 775 |
| 121 |
| 882 |
+-------+
4 rows in set (0.00 sec)
4. UNION과 ORDER BY로 두 테이블의 열 결합하기
이제 서로 다른 두 테이블의 열(Amount, Price)을 하나의 결과로 합치고 오름차순으로 정렬하는 쿼리를 작성합니다. 중복 제거를 위해 DISTINCT도 함께 사용했습니다.
mysql> select distinct Amount from DemoTable1
UNION
select distinct Price from DemoTable2
order by Amount;
위 쿼리는 다음과 같은 결과를 출력합니다.
+--------+
| Amount |
+--------+
| 121 |
| 134 |
| 234 |
| 567 |
| 775 |
| 882 |
+--------+
6 rows in set (0.00 sec)
정리
UNION은 두 SELECT 문의 결과를 세로 방향으로 결합하며, 이때 첫 번째 SELECT 문의 열 이름(Amount)이 최종 결과의 열 이름으로 사용됩니다. 또한 UNION은 기본적으로 중복 값을 자동으로 제거하므로, 두 테이블에 모두 존재하는 값 134는 한 번만 출력되었습니다. 마지막 ORDER BY 절을 통해 전체 결과가 오름차순으로 깔끔하게 정렬된 것을 확인할 수 있습니다.