[SQL] 집합 연산자

·2025년 5월 27일
0

SQL

목록 보기
8/126

✔️ 집합 연산자

UNION / UNION ALL: 합집합
INTERSECT: 교집합
MINUS: 차집합 (순서 중요)

  • SELECT list의 표현식 갯수가 일치해야 함
  • 데이터 유형이 일치해야 함
  • 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;

SELECT문 일치

📌 열이 두 테이블 중 하나에 없는 경우, 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;

집합 연산에서 ORDER BY절 사용

  • 오름차순이 기본

ORDER BY절은 명령문 맨 끝에 한번만 올 수 있음

-- 오류 발생
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;

ORDER BY절은 첫번째 SELECT query의 열만 인식함

-- 오류 발생 (첫번째 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;

0개의 댓글