MySQL에서의 UNION 구문은 n개 이상의 조회 결과에 대한 데이터를 병합해 주는 구문입니다. 또한 UNION, UNION ALL 이 두 개의 사용에 따라 조회 결과가 조금 달라지기 때문에 아래 예제를 보며 비교해보도록 하겠습니다.
UNION, UNION ALL의 기본 문법 및 차이
MySQL에서 UNION과 UNION ALL은 두 개 이상의 조회 결과를 병합하는 경우에 사용됩니다. 하지만 두 개의 구문에서 병합 방식에 차이가 존재합니다. 기본 문법과 같이 차이점에 대해 알아보도록 하겠습니다.
우선 UNION입니다.
SELECT column1, column2, ... FROM table_name1
UNION
SELECT column1, column2, ... FROM table_name2;
다음으론 UNION ALL 구문입니다.
SELECT column1, column2, ... FROM table_name1
UNION ALL
SELECT column1, column2, ... FROM table_name2;
이 두개의 쿼리를 비교해보면 ALL이라는 키워드 이외에 별 다른 차이는 없는 것으로 보이는데 중요한 차이점이 존재합니다. 바로 중복된 데이터를 포함하는지의 여부입니다. 이러한 차이점은 아래 예제를 통해 확인해보도록 하겠습니다.
UNION, UNION ALL 비교 예제
MEM_ID | MEM_NAME | MEM_EMAIL | MEM_ADDRESS |
100004 | 김OO | aa@gmail.com | 경기 안산시 |
100006 | 박OO | bb@naver.com | 경기 안양시 |
STUDENT_ID | STUDENT_NAME | STUDENT_EMAIL | STUDENT_ADDRESS |
1 | 김OO | aa@gmail.com | 경기 안산시 |
2 | 차OO | cc@hanmail.net | 부산광역시 |
위의 예시처럼 각기 다른 두 개의 테이블이 있다고 가정했을 때, UNION 구문을 사용하여 각 테이블의 EMAIL의 정보를 조회하여 병합해보도록 하겠습니다. 하지만 UNION 구문을 사용하기 위해선 일정한 규칙을 지켜야 합니다. 그 규칙은 다음과 같습니다.
- 각 쿼리의 SELECT 절 칼럼의 개수 및 데이터 타입이 일치해야 한다.
- 대응하는 컬럼 명이 같아야 한다. (단, 별칭 사용 가능)
- ORDER BY 절은 마지막에 한 번 사용 가능하다.
위의 조건을 만족하였다면, 이제 데이터를 병합해보도록 하겠습니다.
SELECT STUDENT_EMAIL AS EMAIL FROM MEMBER
UNION
SELECT MEM_EMAIL AS EMAIL FROM STUDENT;
MEM_EMAIL |
aa@gmail.com |
bb@naver.com |
cc@hanmail.net |
위와 같은 결과를 확인할 수 있습니다. 하지만 각 테이블 별로 데이터가 두 개씩 존재하는데 왜 UNION 구문을 사용하면 세 개의 데이터가 출력되는 걸까요? 그 이유는 UNION 구문은 병합하는 과정에서 중복 데이터가 사라지게 됩니다. 하지만 실제 중복 데이터도 포함하여 병합해야 되는 경우가 존재합니다. 이러한 경우에는 UNION ALL을 사용하여 조건에 맞는 모든 데이터를 병합할 수 있습니다.
SELECT STUDENT_EMAIL AS EMAIL FROM MEMBER
UNION ALL
SELECT MEM_EMAIL AS EMAIL FROM STUDENT;
MEM_EMAIL |
aa@gmail.com |
bb@naver.com |
aa@gmail.com |
cc@hanmail.net |
'RDBS > MYSQL' 카테고리의 다른 글
[MySQL]인덱스(INDEX)가 웹 애플리케이션의 성능을 올릴 수 있는 이유 (6) | 2023.07.24 |
---|---|
[MySQL]데이터베이스 튜닝, 최적의 성능을 위한 5가지 핵심 팁 (30) | 2023.07.22 |
[MySQL]테이블 수정하기, ALTER TABLE 총 정리하기 (2) | 2023.07.16 |
[MySQL]GROUP_CONCAT을 활용하여 그룹 별 데이터 나열하기 (6) | 2023.07.11 |
[MySQL]동시성 문제를 해결할 FOR UPDATE 알아보기 (1) | 2023.07.09 |