2 분 소요

UNION은 SQL에서 여러 SELECT 문을 하나의 결과로 합치는 데 사용되는 연산자입니다. 서로 다른 테이블이나 조건에서 조회된 데이터를 하나의 리스트로 보여주고 싶을 때 매우 유용합니다.


1. UNION의 핵심 개념

특징 설명
필드 개수 결합되는 SELECT 문들의 필드 수와 순서, 데이터 타입이 동일해야 함
중복 제거 기본적으로 중복된 행은 자동 제거 (DISTINCT 작용)
정렬 가능 결합된 결과에 ORDER BY 사용 가능 (마지막 SELECT 이후 작성)

2. 기본 문법

SELECT 필드1, 필드2
FROM 테이블1

UNION

SELECT 필드1, 필드2
FROM 테이블2;

필드 수, 순서, 타입이 반드시 일치해야 합니다.


3. UNION 예제

3.1. 이름만 결합 (중복 제거)

SELECT Name FROM Reservation
UNION
SELECT Name FROM Customer;
  • Name 필드를 기준으로 중복 없이 결합

3.2. 중복 포함 (UNION ALL)

SELECT Name FROM Reservation
UNION ALL
SELECT Name FROM Customer;
  • 동일한 이름도 모두 표시

3.3. 필드 수 맞추기

SELECT Name, ReserveDate FROM Reservation
UNION
SELECT Name, NULL AS ReserveDate FROM Customer;
  • Customer 테이블에는 ReserveDate가 없기 때문에 NULL로 맞춤

4. 정렬과 UNION

4.1. 이름 기준 정렬

SELECT Name FROM Reservation
UNION
SELECT Name FROM Customer
ORDER BY Name ASC;
  • 최종 결합 결과를 Name 기준으로 오름차순 정렬

4.2. 날짜 기준 정렬

SELECT Name, ReserveDate FROM Reservation
UNION ALL
SELECT Name, NULL AS ReserveDate FROM Customer
ORDER BY ReserveDate DESC;
  • 날짜가 있는 레코드가 우선, 그 외는 아래 정렬

5. UNION vs JOIN 비교

비교 항목 UNION JOIN
목적 결과 집합 결합 (위아래 합침) 행 병합 (좌우 연결)
조건 필요 여부 없음 ON 절 등으로 연결 조건 필요
필드 일치 필요 필드 개수와 타입 반드시 일치 필드 수 다를 수 있음
중복 처리 기본적으로 제거 (UNION) / 유지 (UNION ALL) 중복 제거 없음
주 사용 목적 유사한 데이터를 하나로 출력 관계형 데이터 조회 (두 테이블 연결)

6. 실전 활용 예제

6.1. 예약자 + 고객 이름 통합 조회

SELECT Name FROM Reservation
UNION
SELECT Name FROM Customer;

이름만 중복 없이 통합


6.2. 출처 표시해서 병합

SELECT Name, 'Reservation' AS Source FROM Reservation
UNION
SELECT Name, 'Customer' AS Source FROM Customer;

결과 예:

이름      | 출처
 --------|--------
홍길동    | Reservation
홍길동    | Customer
임꺽정    | Customer

6.3. 중복을 포함한 전체 정보

SELECT Name, ReserveDate FROM Reservation
UNION ALL
SELECT Name, NULL AS ReserveDate FROM Customer;

모든 예약/고객 데이터를 유지하면서 날짜 있는 쪽은 Reservation, 없는 쪽은 Customer


6.4. 정렬된 결과

SELECT Name, ReserveDate FROM Reservation
UNION
SELECT Name, NULL AS ReserveDate FROM Customer
ORDER BY Name ASC;

7. 요약

항목 설명
UNION 중복 제거된 다중 SELECT 결과 결합
UNION ALL 중복 포함해서 결합
필드 개수/타입 SELECT문 간 동일해야 함
ORDER BY 사용 마지막 SELECT 뒤에 작성

질문 정리

❓ UNION과 UNION ALL의 차이점은?

UNION은 중복 제거, UNION ALL은 중복 포함입니다.

❓ 필드 수가 다르면 오류가 나나요?

→ 네, 반드시 필드 개수와 순서, 데이터 타입이 동일해야 합니다.

❓ 정렬은 어디에 써야 하나요?

ORDER BYUNION 전체 뒤에 한 번만 작성해야 합니다.

❓ JOIN 대신 UNION을 쓸 수 있나요?

→ 목적이 다릅니다. JOIN테이블 간 관계, UNION결과 병합에 사용됩니다.

카테고리:

업데이트:

댓글남기기