728x90
1. UNION / UNION ALL
- UNION: 두 개 이상의 SELECT 결과를 합치되, 중복 행 제거
- UNION ALL: 합칠 때 중복을 그대로 포함
-- 부서 10 직원과 부서 20 직원을 합쳐서 조회 (중복 제거)
SELECT EMPLOYEE_ID, FIRST_NAME, DEPARTMENT_ID
FROM EMPLOYEES
WHERE DEPARTMENT_ID = 10
UNION
SELECT EMPLOYEE_ID, FIRST_NAME, DEPARTMENT_ID
FROM EMPLOYEES
WHERE DEPARTMENT_ID = 20
ORDER BY DEPARTMENT_ID;
-- 중복 포함 버전
SELECT … WHERE DEPARTMENT_ID = 10
UNION ALL
SELECT … WHERE DEPARTMENT_ID = 20;
주의:
- 모든 SELECT는 컬럼 수와 데이터 타입 순서가 같아야 합니다.
- ORDER BY는 마지막 SELECT 뒤에만 붙입니다.
2. INTERSECT
- 두 SELECT 결과의 교집합 (공통된 행만)
-- 급여 3000 초과 직원과 2019년 이후 채용된 직원의 교집합
SELECT EMPLOYEE_ID, FIRST_NAME
FROM EMPLOYEES
WHERE SALARY > 3000
INTERSECT
SELECT EMPLOYEE_ID, FIRST_NAME
FROM EMPLOYEES
WHERE HIREDATE >= DATE '2019-01-01';
3. MINUS
- 첫 번째 SELECT 결과에서 두 번째 SELECT 결과를 뺀 차집합
-- 2018년 이전 채용된 직원 중, 급여 3000 초과 직원 제외
SELECT EMPLOYEE_ID, FIRST_NAME, HIREDATE
FROM EMPLOYEES
WHERE HIREDATE < DATE '2018-01-01'
MINUS
SELECT EMPLOYEE_ID, FIRST_NAME, HIREDATE
FROM EMPLOYEES
WHERE SALARY > 3000;
4. 연습 문제
- EMPLOYEES 테이블에서 부서별로 DEPT 30 직원과 DEPT 40 직원을 UNION ALL 하여 조회해 보세요.
- EMPLOYEES 테이블에서 커미션(COMMISSION_PCT) 있는 직원과 급여 4000 이상 직원의 교집합을 조회해 보세요.
- EMPLOYEES 테이블에서 2017년 이전 채용 직원 중 커미션 없는 직원을 MINUS 로 조회해 보세요.
728x90
'데이터베이스' 카테고리의 다른 글
[SQL] 5. 윈도우 함수(Window Functions) (0) | 2025.05.19 |
---|---|
[SQL] 4. 뷰(View), 인덱스(Index), 시퀀스(Sequence) (0) | 2025.05.19 |
[SQL] 1. JOIN (0) | 2025.05.19 |
댓글