MySQL UNION

UNION

두 개 이상의 SELECT 문의 결과를 하나로 합치는 연산자이다.

기본 문법

SELECT 컬럼1, 컬럼2, ... FROM 테이블1
UNION
SELECT 컬럼1, 컬럼2, ... FROM 테이블2;

UNION vs UNION ALL

구분UNIONUNION ALL
중복 제거중복 행 제거중복 행 포함
성능느림 (중복 체크)빠름
사용 시기중복이 없어야 할 때중복 허용 가능할 때

사용 조건

  1. 컬럼 개수: 각 SELECT 문의 컬럼 개수가 같아야 함
  2. 데이터 타입: 같은 위치의 컬럼 타입이 호환되어야 함
  3. 컬럼 순서: 같은 순서의 컬럼이 의미상 유사해야 함

예시

-- 두 테이블의 사용자 이름 합치기 (중복 제거)
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 문에 개별 적용 가능