대덕인재/Oracle

[Oracle D-15] 집합연산자(Set Operators)

꼬마버거 2025. 4. 21. 11:57

📌 1. 집합 연산자란?

두 개 이상의 SELECT 문 결과를 하나로 합치는 연산자.
하지만 주의!
👉 SELECT문의 컬럼 개수와 데이터 타입이 일치해야 해.

 

 

✅ 집합 연산자 종류 

연산자  설명 중복 제거 정렬
UNION 두 쿼리 결과를 합침 (중복 제거) 자동 (기본)
UNION ALL 두 쿼리 결과를 합침 (중복 포함) 자동 (기본)
INTERSECT 두 쿼리 결과의 공통된 행만 반환 자동 (기본)
MINUS 앞 쿼리 결과에서 뒤 쿼리 결과를 뺌 자동 (기본)

 

💡 예제 테이블

-- 부서1
SELECT EMP_NAME FROM EMP1;

-- 부서2
SELECT EMP_NAME FROM EMP2;

📘 1. UNION – 중복 제거하며 합치기

SELECT EMP_NAME FROM EMP1
UNION
SELECT EMP_NAME FROM EMP2;

두 테이블의 이름을 합치되, 중복은 제거됨.


📘 2. UNION ALL – 중복 포함해서 합치기

SELECT EMP_NAME FROM EMP1
UNION ALL
SELECT EMP_NAME FROM EMP2;

모든 결과를 그대로 보여줘. 중복도 포함됨.


📘 3. INTERSECT – 교집합

SELECT EMP_NAME FROM EMP1
INTERSECT
SELECT EMP_NAME FROM EMP2;

두 SELECT 결과에서 공통된 데이터만 출력


📘 4. MINUS – 차집합

SELECT EMP_NAME FROM EMP1
MINUS
SELECT EMP_NAME FROM EMP2;
 

EMP1에는 있지만, EMP2에는 없는 데이터만 출력

 

 

 

📌 사용 시 주의할 점

  • 각 SELECT문의 컬럼 수와 순서, 데이터 타입이 같아야 함
  • ORDER BY는 마지막 SELECT 뒤에만 한 번 사용 가능
  • 내부 SELECT문에선 ORDER BY 못 씀 (전체 결과에만 가능)
-- 올바른 예시
SELECT EMP_NAME FROM EMP1
UNION
SELECT EMP_NAME FROM EMP2
ORDER BY EMP_NAME;

 

🧠 요약 그림 (간단하게)

EMP1 = {A, B, C}
EMP2 = {B, C, D}

UNION      → {A, B, C, D}
UNION ALL  → {A, B, C, B, C, D}
INTERSECT  → {B, C}
MINUS      → {A}

'대덕인재 > Oracle' 카테고리의 다른 글

[Oracle D-16] VIEW  (0) 2025.04.22
[Oracle D-15] Oracle 객체  (0) 2025.04.21
[Oracle D-12] ANSI JOIN  (0) 2025.04.19
[Oracle D-14] 서브쿼리(Subquery)  (0) 2025.04.18
[Oracle D-13] 외부조인(Outer join)  (0) 2025.04.17