본문 바로가기
자격증/SQLD

[SQLD] 4-3: 집합 연산자 (Set Operators)

by rnasterofmysea 2025. 2. 17.
반응형

[SQLD] Chapter 4-3: 집합 연산자 (Set Operators)


1. 집합 연산자(Set Operators)란?

집합 연산자는 두 개 이상의 쿼리 결과를 하나로 합치거나, 차이를 구하는 연산자입니다. 여러 개의 SELECT 문을 조합하여 결과를 만들 수 있으며, 각 쿼리의 결과가 동일한 컬럼 개수와 데이터 타입을 가져야 합니다.

1.1 집합 연산자의 종류

  • UNION: 두 개의 결과를 합친 후 중복 제거
  • UNION ALL: 두 개의 결과를 합치되 중복을 허용
  • INTERSECT: 두 개의 결과에서 공통된 데이터만 출력
  • MINUS (EXCEPT): 첫 번째 쿼리의 결과에서 두 번째 쿼리의 결과를 제외한 값 출력

https://planharry.tistory.com/51


2. 집합 연산자별 사용법 및 예제

집합 연산자를 사용하기 위해서는 각 SELECT 문이 동일한 컬럼 개수 및 데이터 타입을 가져야 합니다.

 

EMPLOYEES_A 테이블

EMPLOYEE_ID  EMPLOYEE_NAME  DEPARTMENT_ID
1 홍길동 10
2 김철수 20
3 이영희 10
4 박민수 30

EMPLOYEES_B 테이블

EMPLOYEE_ID  EMPLOYEE_NAME  DEPARTMENT_ID
3 이영희 10
4 박민수 30
5 최민호 40
6 한지민 50

 

2.1 UNION (중복 제거 합집합)

SELECT EMPLOYEE_ID, EMPLOYEE_NAME FROM EMPLOYEES_A
UNION
SELECT EMPLOYEE_ID, EMPLOYEE_NAME FROM EMPLOYEES_B;

결과

EMPLOYEE_ID  EMPLOYEE_NAME
1 홍길동
2 김철수
3 이영희
4 박민수
5 최민호
6 한지민

 

설명

  • EMPLOYEES_A와 EMPLOYEES_B를 합쳐서 중복을 제거한 결과 출력

2.2 UNION ALL (중복 허용 합집합)

SELECT EMPLOYEE_ID, EMPLOYEE_NAME FROM EMPLOYEES_A
UNION ALL
SELECT EMPLOYEE_ID, EMPLOYEE_NAME FROM EMPLOYEES_B;

결과

EMPLOYEE_ID  EMPLOYEE_NAME
1 홍길동
2 김철수
3 이영희
4 박민수
3 이영희
4 박민수
5 최민호
6 한지민

 

설명

  • EMPLOYEES_A와 EMPLOYEES_B의 데이터를 그대로 합쳐서 중복도 포함된 결과 출력

2.3 INTERSECT (교집합 - 공통 데이터만 출력)

SELECT EMPLOYEE_ID, EMPLOYEE_NAME FROM EMPLOYEES_A
INTERSECT
SELECT EMPLOYEE_ID, EMPLOYEE_NAME FROM EMPLOYEES_B;

결과

EMPLOYEE_ID  EMPLOYEE_NAME
3 이영희
4 박민수

 

설명

  • EMPLOYEES_A와 EMPLOYEES_B의 공통된 데이터만 출력됨

2.4 MINUS (EXCEPT) (차집합 - A에서 B를 뺀 값 출력)

SELECT EMPLOYEE_ID, EMPLOYEE_NAME FROM EMPLOYEES_A
MINUS
SELECT EMPLOYEE_ID, EMPLOYEE_NAME FROM EMPLOYEES_B;

결과

EMPLOYEE_ID  EMPLOYEE_NAME
1 홍길동
2 김철수

 

설명

  • EMPLOYEES_A에서 EMPLOYEES_B에 없는 데이터를 출력 (A - B)

 

SELECT EMPLOYEE_ID, EMPLOYEE_NAME FROM EMPLOYEES_B
MINUS
SELECT EMPLOYEE_ID, EMPLOYEE_NAME FROM EMPLOYEES_A;

결과

EMPLOYEE_ID  EMPLOYEE_NAME
5 최민호
6 한지민

 

설명

  • EMPLOYEES_B에서 EMPLOYEES_A에 없는 데이터를 출력 (B - A)

 

3. 집합 연산자 사용 시 주의점

  1. 컬럼 개수 및 데이터 타입이 일치해야 함
    • SELECT 문에 포함된 컬럼의 개수와 데이터 타입이 같아야 함
  2. ORDER BY 사용 시 마지막 SELECT 문에만 적용 가능
    SELECT EMPLOYEE_ID, EMPLOYEE_NAME FROM EMPLOYEES_A
    UNION
    SELECT EMPLOYEE_ID, EMPLOYEE_NAME FROM EMPLOYEES_B
    ORDER BY EMPLOYEE_ID;
    
  3. NULL 값은 중복 제거 시 하나로 간주됨
    SELECT NULL AS VALUE FROM DUAL
    UNION
    SELECT NULL AS VALUE FROM DUAL;
    
    • 결과: NULL이 하나만 남음 (중복 제거됨)

4. 마무리

이번 장에서는 집합 연산자(UNION, UNION ALL, INTERSECT, MINUS)의 개념과 활용법을 학습했습니다.

📌 집합 연산자는 데이터 조회 시 여러 개의 쿼리 결과를 하나로 합치거나 차이를 구하는 데 유용하며, 특히 보고서 작성 및 데이터 분석에 많이 사용됩니다.

다음 장에서는 그룹 함수(Group Functions) 및 집계 연산자(Aggregate Functions)에 대해 다룰 예정입니다!

 

 

 

반응형