UNION
두 개 이상의 SELECT 문의 결과를 하나로 합치는 연산자이다.
기본 문법
SELECT 컬럼1, 컬럼2, ... FROM 테이블1
UNION
SELECT 컬럼1, 컬럼2, ... FROM 테이블2;
UNION vs UNION ALL
| 구분 | UNION | UNION ALL |
|---|---|---|
| 중복 제거 | 중복 행 제거 | 중복 행 포함 |
| 성능 | 느림 (중복 체크) | 빠름 |
| 사용 시기 | 중복이 없어야 할 때 | 중복 허용 가능할 때 |
사용 조건
- 컬럼 개수: 각 SELECT 문의 컬럼 개수가 같아야 함
- 데이터 타입: 같은 위치의 컬럼 타입이 호환되어야 함
- 컬럼 순서: 같은 순서의 컬럼이 의미상 유사해야 함
예시
-- 두 테이블의 사용자 이름 합치기 (중복 제거)
SELECT `name` FROM `users`
UNION
SELECT `name` FROM `admins`;
-- 중복 포함하여 합치기
SELECT `name` FROM `users`
UNION ALL
SELECT `name` FROM `admins`;
-- 여러 컬럼 합치기
SELECT `id`, `name`, `email` FROM `users` WHERE `age` >= 20
UNION
SELECT `id`, `name`, `email` FROM `users` WHERE `status` = 'active';
-- 정렬 적용 (마지막에 한 번만)
SELECT `name` FROM `users`
UNION
SELECT `name` FROM `admins`
ORDER BY `name`;
주의사항
- 컬럼명은 첫 번째 SELECT 문의 컬럼명이 사용됨
ORDER BY는 마지막 SELECT 문 뒤에 한 번만 사용 가능LIMIT는 각 SELECT 문에 개별 적용 가능