집합 연산: UNION·UNION ALL·INTERSECT·MINUS/EXCEPT
집합 연산: UNION · UNION ALL · INTERSECT · MINUS/EXCEPT
두 쿼리의 결과를 세로로 합치거나 비교하고 싶을 때는 JOIN 이 아니라 집합 연산을 씁니다. UNION 은 합집합, INTERSECT 는 교집합, MINUS(EXCEPT)는 차집합입니다. 이 레슨은 네 연산의 차이와 중복 처리 규칙, 그리고 두 테이블의 데이터를 맞춰보는 대사(reconciliation) 패턴을 직접 실행해 확인합니다.
1. 왜 배우는가
"2024년 주문 고객과 2025년 주문 고객을 한 목록으로", "이관 전 데이터와 이관 후 데이터가 정말 똑같은가"처럼 서로 다른 두 조회 결과를 위아래로 합치거나 맞대어 보는 작업은 실무에서 자주 나옵니다. JOIN 은 두 테이블을 옆으로 붙이지만, 이런 요구는 결과를 세로로 합치거나 두 결과의 교집합·차집합을 구하는 집합 연산이 맞는 도구입니다.
집합 연산은 문법이 짧아 쉬워 보이지만 함정이 몇 가지 있습니다. UNION 은 중복을 제거하느라 정렬·해시 비용이 들고, 컬럼 수와 타입을 맞추지 않으면 오류가 나며, ORDER BY 는 전체 결과에 딱 한 번만 쓸 수 있습니다. 이번 레슨은 이 규칙들을 직접 오류를 내보며 확인합니다.
두 번째 절반은 INTERSECT 와 EXCEPT(Oracle 의 MINUS)로 두 테이블의 데이터를 비교하는 대사 패턴입니다. "이관 전에만 있는 행", "이관 후에만 있는 행"을 양방향으로 뽑아내면 데이터 이관이나 배치 검증에서 흔히 쓰는 점검표를 SQL 만으로 만들 수 있습니다.