두개의 SELECT문을 수직으로 합쳐
하나의 결과로 만들어주는 집합 연산자를 UNION이라고 한다.
서로 다른 테이블에서 유사한 형태의 데이터를 한 번에 가져오거나,
하나의 테이블 내에서 조건별로 나눠져있는 데이터를 합칠 때 사용한다.
💡 UNION 사용 시 필수 조건
1) 가져 올 테이블의 열(Column)의 개수가 같아야 한다.
2) 열의 데이터 타입이 위아래 순서대로 서로 호환되어야 한다. (첫 번째 열이 문자형이면 두 번째 SELECT문의 첫번째 열도 문자형!!)
-- 기본 문법
SELECT 컬럼1, 컬럼2
FROM 테이블A
UNION
SELECT 컬럼1, 컬럼2
FROM 테이블B;
❓ UNION과 JOIN의 차이점
JOIN의 경우 테이블을 합치면 더 많은 열(Column)을 가지게 된다.
하지만 UNION은 열은 고정된 개수이다.
즉, JOIN은 수평으로 테이블을 확장하고 UNION은 수직으로 테이블을 확장하게 된다.

UNION
중복 데이터를 삭제하고 결과를 보여주는 방식이다.
내부적으로 중복을 제거하기 위해 정렬과 비교연산을 거치기 때문에
데이터가 많을수록 속도가 느려질 수 있다.
select 'MySQL'
union
select 'Python'
union
select 'MySQL';
실행결과 ▶

📌주의할 점!!
데이터 값 중 하나라도 다른값이 있을 경우 중복데이터가 아닌 것으로 판별하게된다.
select 'MySQL', '1'
union
select 'Python', '1'
union
select 'MySQL', '2'
union
select 'Python', '1';
실행결과 ▶

UNION ALL
중복 데이터를 삭제하지 않고 모든 결과를 보여주는 방식이다.
UNION과 다르게 단순히 결과를 이어붙이기만 하기 때문에 속도가 보다 더 빠르다.
그렇기 때문에 중복 발생이 없거나, 상관이 없다면
속도적인 성능을 위해 UNION ALL을 쓰는것이 더 좋다.
select 'MySQL'
union all
select 'Python'
union all
select 'MySQL';
실행결과 ▶

📌 정렬(ORDER BY)과 함께 사용 시 주의할 점!
UNION을 사용할 때 각 SELECT문마다 ORDER BY를 넣으면 에러가 발생한다.
정렬을 사용할때는 마지막 쿼리에 딱 한번만 사용해야 전체 결과가 정렬된다.
-- 에러 발생 (각각 정렬 불가)
SELECT 'MySQL' ORDER BY 1
UNION
SELECT 'Python' ORDER BY 1;
-- 올바른 방법 (마지막에 한 번만 정렬)
SELECT 'MySQL'
UNION
SELECT 'Python'
ORDER BY 1;
📌 컬럼명(별칭)
여러 테이블을 합치다 보면 테이블마다 컬럼명을 다르게 지정할수도 있다.
컬럼명이 다를 경우엔 최종 결과창에선 가장 첫번째 SELECT문에 작성된 컬러명으로 결과가 실행된다.
select 'MySQL' as my_coulmn -- 최종 컬럼명 = my_coulmn
union
select 'Python' as nex_column;
실행결과 ▶

'데이터베이스 관리(DBMS,SQL)' 카테고리의 다른 글
| [MySQL] 사용자 계정 생성과 권한 관리(GRANT, REVOKE, ALTER, DROP) (0) | 2026.06.09 |
|---|---|
| [MySQL] 서브쿼리(Sub Query) - 단일행, 다중행, 스칼라, 인라인 뷰 (1) | 2026.06.08 |
| 데이터베이스 정규화란? (1NF, 2NF, 3NF, 4NF, 반정규화) (0) | 2026.06.07 |
| [MySQL] DML, DDL 실행, 테이블 생성, 데이터타입, 제약조건 (1) | 2026.06.05 |
| 데이터베이스 기초 (DB, DBMS, RDBMS, SQL) (0) | 2026.06.04 |