SQL에서 UNION과 UNION ALL은 두 개 이상의 SELECT 결과를 수직으로 합치는 데 사용하는 문법입니다.
테이블 간의 관계가 없어도, 동일한 형식의 데이터를 한 번에 보여주고 싶을 때 유용합니다.
예시 테이블
online_customers 테이블
id | name |
1 | Alice |
2 | Bob |
offline_customers 테이블
id | name |
3 | Charlie |
4 | Bob |
1. UNION
SELECT name FROM online_customers
UNION
SELECT name FROM offline_customers;
name |
Alice |
Bob |
Charlie |
→ Bob은 두 테이블에 모두 있지만, 한 번만 표시됩니다.
2. UNION ALL
SELECT name FROM online_customers
UNION ALL
SELECT name FROM offline_customers;
name |
Alice |
Bob |
Charlie |
Bob |
→ Bob이 중복 포함되어 출력됩니다.
※ UNION vs UNION ALL
구문 | 설명 |
UNION | 중복 제거 + 정렬 (기본값) |
UNION ALL | 중복 제거 없이 모든 행을 그대로 합침 |
- UNION은 중복 제거와 정렬 비용이 있어 성능이 더 느릴 수 있습니다.
- 중복이 중요하지 않다면 UNION ALL을 사용하는 것이 더 효율적입니다.
- ORDER BY는 전체 결과에 대해 한 번만 사용할 수 있으며, 마지막 SELECT 뒤에만 작성해야 합니다.
SELECT name FROM online_customers
UNION
SELECT name FROM offline_customers
ORDER BY name;
- UNION을 사용할 때는 SELECT 절의 컬럼 수와 타입이 정확히 일치해야 합니다.
-- 아래 쿼리는 오류 발생
SELECT name FROM online_customers
UNION
SELECT id, name FROM offline_customers;
'SQL' 카테고리의 다른 글
[DB Optimization#2] MySQL 구조 (0) | 2025.04.16 |
---|---|
[DB Optimization#1] DB 성능 최적화란? (0) | 2025.04.16 |
[SQL#11] JOIN (0) | 2025.04.16 |
[SQL#10] CASE (0) | 2025.04.16 |
[SQL#9] GROUP BY / HAVING (0) | 2025.04.16 |