SQL UNION 다중 SELECT 결과 결합하는 방법
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 BY는 UNION 전체 뒤에 한 번만 작성해야 합니다.
❓ JOIN 대신 UNION을 쓸 수 있나요?
→ 목적이 다릅니다. JOIN은 테이블 간 관계, UNION은 결과 병합에 사용됩니다.
댓글남기기