UNION 계열은 두 SELECT가 같은 구조를 가져야 합니다. 컬럼 개수와 순서, 타입 호환성을 먼저 맞추고 나서 중복 제거 여부를 결정하면 됩니다.
핵심 체크포인트
- 집합 연산자는 SELECT 결과끼리 결합합니다.
- 양쪽 SELECT의 컬럼 개수와 순서가 같아야 합니다.
- 중복 제거 여부가 UNION과 UNION ALL의 핵심 차이입니다.
주제별 설명
UNION
두 결과를 합치되 중복 행은 제거합니다.
- 중복 제거가 포함되므로 정렬이나 비교 비용이 더 들어갈 수 있습니다.
- 시험에서는 UNION과 UNION ALL의 결과 차이를 묻는 경우가 많습니다.
SELECT member_id AS entity_id,
member_name AS entity_name
FROM members
UNION
SELECT product_id AS entity_id,
product_name AS entity_name
FROM products;UNION ALL
두 결과를 그대로 이어 붙이며 중복을 제거하지 않습니다.
- 원본 결과를 모두 유지해야 할 때 사용합니다.
- 중복 제거가 없어 결과 건수를 예측하기가 더 쉽습니다.
INTERSECT
양쪽 결과 집합에 공통으로 존재하는 행만 반환합니다.
- 교집합을 구하는 연산자라고 생각하면 이해가 쉽습니다.
- 중복 의미보다 공통 존재 여부를 확인할 때 유용합니다.
MINUS
첫 번째 결과에는 있고 두 번째 결과에는 없는 행만 반환합니다.
- 차집합을 구하는 연산자입니다.
- 어떤 데이터가 빠졌는지, 누락된 대상이 무엇인지 확인할 때 자주 씁니다.
SELECT member_id
FROM members
MINUS
SELECT member_id
FROM payments;실습 흐름 추천
- 두 SELECT의 컬럼 수와 순서를 먼저 맞춥니다.
- UNION과 UNION ALL을 번갈아 실행해 중복 제거 유무를 직접 확인합니다.
- INTERSECT와 MINUS로 공통값과 차집합을 비교해 집합 개념을 익힙니다.
바로 이어서 해보려면
이론만 읽지 말고 바로 blacksql.sqld.kr에서 실행해보고, 문제 풀이 감각은 www.sqld.kr에서 이어가면 학습 속도가 훨씬 빨라집니다.
자주 묻는 질문
전체 결합 결과를 정렬하려면 마지막 SELECT 뒤 한 번만 적는 것이 일반적입니다.
중복 제거가 필요 없을 때는 원본 결과를 유지하고 비용도 덜 들 수 있어 실무에서 자주 선택됩니다.