반응형
[SQLD] Chapter 4-3: 집합 연산자 (Set Operators)
1. 집합 연산자(Set Operators)란?
집합 연산자는 두 개 이상의 쿼리 결과를 하나로 합치거나, 차이를 구하는 연산자입니다. 여러 개의 SELECT 문을 조합하여 결과를 만들 수 있으며, 각 쿼리의 결과가 동일한 컬럼 개수와 데이터 타입을 가져야 합니다.
1.1 집합 연산자의 종류
- UNION: 두 개의 결과를 합친 후 중복 제거
- UNION ALL: 두 개의 결과를 합치되 중복을 허용
- INTERSECT: 두 개의 결과에서 공통된 데이터만 출력
- MINUS (EXCEPT): 첫 번째 쿼리의 결과에서 두 번째 쿼리의 결과를 제외한 값 출력
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. 집합 연산자 사용 시 주의점
- 컬럼 개수 및 데이터 타입이 일치해야 함
- SELECT 문에 포함된 컬럼의 개수와 데이터 타입이 같아야 함
- ORDER BY 사용 시 마지막 SELECT 문에만 적용 가능
SELECT EMPLOYEE_ID, EMPLOYEE_NAME FROM EMPLOYEES_A UNION SELECT EMPLOYEE_ID, EMPLOYEE_NAME FROM EMPLOYEES_B ORDER BY EMPLOYEE_ID;
- 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)에 대해 다룰 예정입니다!
반응형
'자격증 > SQLD' 카테고리의 다른 글
[SQLD] 4-5: 윈도우 함수 (Window Functions) (0) | 2025.02.17 |
---|---|
[SQLD] 4-4 : 그룹(소계) 함수 및 집계 연산자 (0) | 2025.02.17 |
[SQLD] 4-2: 뷰 (View) (0) | 2025.02.17 |
[SQLD] 4-1: 서브쿼리 (Subquery) (0) | 2025.02.17 |
Part 4: SQL 활용 (Advanced SQL Usage) (0) | 2025.02.16 |