UNION과 UNION ALL은 두 개 이상의 SELECT 결과를 수직으로 붙이는 것
👉 쉽게 말해, 행을 합쳐서 하나의 테이블처럼 보여주는 것.
우리가 평소에 쓰던 JOIN이 가로로 붙여 '열'에 붙는 거랑 반대라고 생각하면 됨
예:
SELECT name FROM online_customer
UNION
SELECT name FROM offline_customer;
| 구분 | UNION | UNION ALL |
|---|---|---|
| 중복 제거 | ✅ 중복된 행 제거 | ❌ 중복된 행도 모두 포함 |
| 성능 | 느릴 수 있음 (중복 제거 때문) | 더 빠름 |
| 용도 | 데이터 정제 목적 | 집계용/로그용/전체 확인용 등 |
UNIONSELECT 컬럼1, 컬럼2 FROM 테이블A
UNION
SELECT 컬럼1, 컬럼2 FROM 테이블B;
UNION ALLSELECT 컬럼1, 컬럼2 FROM 테이블A
UNION ALL
SELECT 컬럼1, 컬럼2 FROM 테이블B;
-- 고객 정보 테이블 2개
TABLE online_customer
+----+--------+
| ID | NAME |
+----+--------+
| 1 | Alice |
| 2 | Bob |
TABLE offline_customer
+----+--------+
| ID | NAME |
+----+--------+
| 3 | Carol |
| 2 | Bob |
UNION 사용SELECT NAME FROM online_customer
UNION
SELECT NAME FROM offline_customer;
결과:
Alice
Bob
Carol -- 중복된 'Bob'은 1개만 출력됨
UNION ALL 사용SELECT NAME FROM online_customer
UNION ALL
SELECT NAME FROM offline_customer;
결과:
Alice
Bob
Carol
Bob -- 중복된 'Bob'도 다 출력됨
컬럼 개수, 순서, 타입 일치해야 함
SELECT id, name FROM A
UNION
SELECT id FROM B; -- ❌ 에러 발생
ORDER BY는 마지막에 1번만
SELECT name FROM A
UNION
SELECT name FROM B
ORDER BY name;
convert와 동일함.
[사용법]
cast(123.45 as char)
CONVERT('2025-06-09', DATE)