- 두 개 이상의 테이블에서 조인을 사용하지 않고 연관된 데이터를 조회하는 방법 중 하나가 집합 연산자(Set Operator)
- 서로 다른 테이블에서 유사한 형태의 결과를 반환하는 것을 하나의 결과로 합치고자 할 때와 동일 테이블에서 서로 다른 질의를 수행하여 결과를 합치고자 할 때 사용할 수 있다.
- 튜닝 관점으로 실행계획을 분리하고자 하는 목적으로도 사용한다.
- 집합 연산자를 사용하기 위한 조건
- SELECT 절의 컬럼 수가 동일
- SELECT 절의 동일 위치에 존재하는 컬럼의 데이터 타입이 상호 호환 가능
| 집합 연산자 | 연산자의 의미 |
| UNION(합집합) | 여러 개의 SQL문의 결과에 대한 합집합으로 결과에서 모든 중복된 행은 하나의 행으로 만든다. |
| UNION ALL(합집합) | 여러 개의 SQL문의 결과에 대한 합집합으로 중복된 행도 그대로 결과로 표시된다. 즉, 단순히 결과만 합쳐놓은 것이다. 일반적으로 여러 질의 결과가 상호 배타적인(Exclusive)일 때 많이 사용한다. 개별 SQL문의 결과가 서로 중복되지 않는 경우, UNION과 결과가 동일힏다. (결과의 정렬 순서에는 차이가 있을 수 있음) |
| INTERSECT(교집합) | 여러 개의 SQL문의 결과에 대한 교집합이다. 중복된 행은 하나의 행으로 만든다. |
| EXCEPT(차집합) | 앞의 SQL문의 결과에서 뒤의 SQL문의 결과에 대한 차집합이다. 중복된 행은 하나의 행으로 만든다.(일부 데이터베이스는 MINUS를 사용함) |
- 집합 연산자를 여러번 사용했을 경우
SELECT COL1, COL2
FROM TBL1
UNION ALL
SELECT COL1, COL2
FROM TBL2
UNION
SELECT COL1, COL2
FROM TBL1
-- 1. 위에서부터 아래로 하나하나 결과를 만든 뒤 그다음 집합연산자 수행하기
SELECT COL1, COL2 FROM TBL1 UNION ALL
SELECT COL1, COL2 FROM TBL2
-- 중복제거하지 않고 합쳐서 결과표출
-- 2. 1번의 결과에 UNION 아래 쿼리 수행
(1번결과) UNION
SELECT COL1, COL2 FROM TBL1
-- 결국 UNION으로 중복된 내용 전부 제거 됨
- UNION, UNION ALL 절의 IN절 또는 OR절로 변환 가능
반응형
'SQLD > SQL 전문가 가이드' 카테고리의 다른 글
| 2.2.4 제4절 서브쿼리 (0) | 2025.05.27 |
|---|---|
| 2.2.3 제3절 계층형 질의와 셀프 조인 (6) | 2025.05.26 |
| 2.1.4 제4절 TCL (0) | 2024.11.05 |
| 2.1.3 제3절 DML (0) | 2024.11.04 |
| 2.1.2 제2절 DDL (0) | 2024.10.23 |