UNION / UNION ALL
: 합집합
INTERSECT
: 교집합
MINUS
: 차집합 (순서 중요)
ORDER BY
절은 명령문 맨 끝에 한번만 올 수 있음UNION ALL
외에는 자동 제거됨-- UNION (중복 행 제거)
SELECT job_id
FROM employees
UNION
SELECT job_id
FROM retired_employees;
-- UNION ALL (중복 행 포함)
SELECT job_id, department_id
FROM employees
UNION ALL
SELECT job_id, department_id
FROM retired_employees
ORDER BY job_id;
-- INTERSECT
SELECT manager_id,department_id
FROM employees
INTERSECT
SELECT manager_id,department_id
FROM retired_employees ;
-- MINUS
SELECT employee_id, job_id
FROM employees
WHERE department_id = 80
MINUS
SELECT employee_id, job_id
FROM retired_employees
WHERE department_id = 90;
📌 열이 두 테이블 중 하나에 없는 경우, TO_CHAR 함수
또는 기타 변환 함수를 사용하여 데이터 유형을 일치시켜야 됨
-- 예시 1
SELECT location_id, department_name "Department",
TO_CHAR(NULL) "Warehouse location"
FROM departments
UNION
SELECT location_id, TO_CHAR(NULL) "Department",
state_province
FROM locations;
-- 예시 2
SELECT FIRST_NAME, JOB_ID, TO_DATE(hire_date)"HIRE_DATE"
FROM employees
UNION
SELECT FIRST_NAME, JOB_ID, TO_DATE(NULL)"HIRE_DATE"
FROM retired_employees;
-- 오류 발생
SELECT job_id, department_id
FROM employees
ORDER BY department_id --(이 행 제거해줘야 오류해결)
UNION ALL
SELECT job_id, department_id
FROM retired_employees
ORDER BY job_id;
-- 오류 발생 (첫번째 select절의 이름으로 인식됨)
SELECT job_id AS job, department_id
FROM employees
UNION ALL
SELECT job_id AS jobid, department_id
FROM retired_employees
ORDER BY jobid;
-- 오류 해결
SELECT job_id AS job, department_id
FROM employees
UNION ALL
SELECT job_id AS jobid, department_id
FROM retired_employees
ORDER BY job;