1. 집합 연산자란?
SQL에서 두 개 이상의 SELECT 문의 결과를 하나로 합치는 연산자입니다. 종류는 다음 4가지입니다.
연산자의미
| UNION | 두 결과를 합치고 중복 제거 |
| UNION ALL | 두 결과를 합치고 중복 유지 (제거 안 함) |
| INTERSECT | 두 결과의 교집합 (공통된 행만) |
| MINUS (Oracle) / EXCEPT (SQL Server) | 차집합 (첫 번째 결과에서 두 번째 결과를 뺀 것) |
공통 규칙:
- 각 SELECT 문의 컬럼 개수가 같아야 함
- 대응되는 컬럼의 데이터 타입이 서로 호환되어야 함
- 결과의 컬럼명은 첫 번째 SELECT 문을 기준으로 표시됨
2. UNION vs UNION ALL 차이점
Code
SELECT 이름 FROM 학생
UNION
SELECT 이름 FROM 교수;
- 중복된 이름이 있으면 한 번만 표시 (내부적으로 정렬 및 중복 제거 작업 수행 → 성능 비용 있음)
Code
SELECT 이름 FROM 학생
UNION ALL
SELECT 이름 FROM 교수;
- 중복 제거 없이 그대로 다 합쳐서 표시 (중복 제거 작업이 없어 속도가 더 빠름)
핵심 차이: UNION은 중복을 제거하지만 느리고, UNION ALL은 중복을 그대로 두지만 빠릅니다.
3. 집합 연산자를 이용한 SELECT문 예시
예: 화학과 학생과 컴퓨터과 학생을 모두 조회 (중복 제거)
Code
SELECT 학번, 이름 FROM 학생 WHERE 학과 = '화학과'
UNION
SELECT 학번, 이름 FROM 학생 WHERE 학과 = '컴퓨터과';
예: 화학과 학생이면서 동시에 평점 4.0 이상인 학생 (교집합)
Code
SELECT 학번, 이름 FROM 학생 WHERE 학과 = '화학과'
INTERSECT
SELECT 학번, 이름 FROM 학생 WHERE 평점 >= 4.0;
예: 화학과 학생 중 평점 4.0 이상이 아닌 학생 (차집합)
Code
SELECT 학번, 이름 FROM 학생 WHERE 학과 = '화학과'
MINUS
SELECT 학번, 이름 FROM 학생 WHERE 평점 >= 4.0;