본문 바로가기

SQLD/SQL 전문가 가이드

2.2.2 제2절 집합 연산자(set operator)

  • 두 개 이상의 테이블에서 조인을 사용하지 않고 연관된 데이터를 조회하는 방법 중 하나가 집합 연산자(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