MySQL에서 서로 다른 두 테이블(또는 두 열)에 있는 값들을 중복 없이 하나로 합쳐서 조회하려면 UNION 연산자를 사용하면 됩니다. UNION은 여러 SELECT 쿼리의 결과를 결합하면서 자동으로 중복 값을 제거해 주기 때문에, 두 열의 고유한(distinct) 값을 손쉽게 추출할 수 있습니다.
이번 글에서는 예제를 통해 두 열에서 고유한 값을 선택하는 방법을 단계별로 살펴보겠습니다.
1. 첫 번째 테이블 생성
먼저 예제에 사용할 첫 번째 테이블을 생성합니다.
mysql> create table DemoTable1
(
Value1 int
);
Query OK, 0 rows affected (0.56 sec)2. 첫 번째 테이블에 데이터 삽입
INSERT 명령어를 사용해 몇 개의 레코드를 추가합니다.
mysql> insert into DemoTable1 values(1); Query OK, 1 row affected (0.13 sec) mysql> insert into DemoTable1 values(2); Query OK, 1 row affected (0.08 sec) mysql> insert into DemoTable1 values(3); Query OK, 1 row affected (0.12 sec) mysql> insert into DemoTable1 values(4); Query OK, 1 row affected (0.12 sec)
3. 첫 번째 테이블 데이터 확인
SELECT 문으로 저장된 모든 레코드를 조회합니다.
mysql> select *from DemoTable1;
실행 결과는 다음과 같습니다.
+--------+ | Value1 | +--------+ | 1 | | 2 | | 3 | | 4 | +--------+ 4 rows in set (0.00 sec)
4. 두 번째 테이블 생성 및 데이터 삽입
이제 비교할 두 번째 테이블을 생성합니다.
mysql> create table DemoTable2
(
Value2 int
);
Query OK, 0 rows affected (0.62 sec)마찬가지로 INSERT 명령어로 레코드를 추가합니다.
mysql> insert into DemoTable2 values(3); Query OK, 1 row affected (0.14 sec) mysql> insert into DemoTable2 values(4); Query OK, 1 row affected (0.15 sec) mysql> insert into DemoTable2 values(5); Query OK, 1 row affected (0.16 sec) mysql> insert into DemoTable2 values(6); Query OK, 1 row affected (0.08 sec)
두 번째 테이블의 전체 레코드를 조회해 보겠습니다.
mysql> select *from DemoTable2;
실행 결과는 다음과 같습니다.
+--------+ | Value2 | +--------+ | 3 | | 4 | | 5 | | 6 | +--------+ 4 rows in set (0.00 sec)
5. UNION으로 두 열의 고유한 값 선택하기
이제 두 열에서 중복 없는 고유한 값을 선택하는 쿼리입니다. 첫 번째 테이블의 Value1 열과 두 번째 테이블의 Value2 열을 UNION으로 연결합니다.
mysql> select Value1 from DemoTable1 UNION select Value2 from DemoTable2;
실행 결과는 다음과 같습니다.
+--------+ | Value1 | +--------+ | 1 | | 2 | | 3 | | 4 | | 5 | | 6 | +--------+ 6 rows in set (0.00 sec)
결과 분석
두 테이블에는 각각 4개씩 총 8개의 값이 있었지만, 최종 결과는 6개만 반환되었습니다. 그 이유는 두 테이블 모두에 존재하는 중복 값인 3과 4가 UNION 연산 과정에서 자동으로 제거되었기 때문입니다.
참고 사항
만약 중복 값을 제거하지 않고 모든 값을 그대로 유지하고 싶다면 UNION ALL을 사용하면 됩니다. UNION ALL은 중복 검사를 수행하지 않기 때문에 성능 면에서도 더 빠릅니다. 반대로, 고유한 값만 필요한 경우라면 기본 UNION이 적합합니다.