✅ 예제 테이블 생성
CREATE TABLE employees (
employee_id INT PRIMARY KEY,
first_name VARCHAR(50),
last_name VARCHAR(50),
department_id INT
);
CREATE TABLE departments (
department_id INT PRIMARY KEY,
department_name VARCHAR(50)
);
INSERT INTO employees (employee_id, first_name, last_name, department_id) VALUES
(1, 'John', 'Doe', 1),
(2, 'Jane', 'Smith', 2),
(3, 'Bob', 'Johnson', 1),
(4, 'Alice', 'Brown', 3),
(5, 'Michael', 'Davis', 2);
INSERT INTO departments (department_id, department_name) VALUES
(1, 'IT'),
(2, 'Sales'),
(3, 'HR');


01. UNION, UNION ALL - 합집합

✅ UNION
- 두 개 이상의 SELECT 문의 결과를 결합하는 데 사용
- 중복 행은 하나로 간주(중복 행 제거)
✔️ UNION 연산을 사용해 employees 테이블과 departments 테이블에서
major과 department_id 열에서 중복 없는 모든 값 가져오기
SELECT department_id FROM employees
UNION
SELECT department_id FROM departments;

✅ UNION ALL
- UNION과 거의 동일하지만 중복 행을 제거 하지 않음
✔️ UNION 연산을 사용해 employees 테이블과 departments 테이블에서
department_id 열의 모든 값 가져오기
SELECT department_id FROM employees
UNION ALL
SELECT department_id FROM departments;

02. INTERSECT - 교집합

✅ INTERSECT
- INTERSECT 연산자는 두 개 이상의 SELECT 문의 공통된 결과를 반환
- 두 테이블이 공통으로 갖는 행만 결합하고 중복은 생략
- 원래 MySQL에서 INTERSECT가 지원 안돼서 INNER JOIN으로 대체 했는데,
MySQL 8.0.31 부터 INTERSECT 연산자가 추가됨.
SELECT department_id FROM employees
INTERSECT
SELECT department_id FROM departments;

03. EXCEPT - 차집합

✅ EXCEPT
- 두 개의 SELECT 문의 결과 집합을 비교하여 첫 번째 집합에서 두 번째 집합에 없는 행을 반환하는 집합 차이 연산자
- MySQL 8.0.31 부터 EXCEPT 연산자가 추가됨.
- Oracle의 경우는 MINUS 연산자 사용
✔️ departments 테이블에 행 추가
INSERT INTO departments (department_id, department_name) VALUES
(4, 'R&D');

✔️ departments 테이블에만 존재하는 department_id 찾기
SELECT department_id FROM departments
EXCEPT
SELECT department_id FROM employees;

👉또는 NOT IN 연산자 사용
SELECT department_id FROM departments
WHERE department_id NOT IN (SELECT department_id FROM employees);

출처 및 참고 문헌(reference)
https://dev.mysql.com/doc/refman/8.0/en/set-operations.html
MySQL :: MySQL 8.0 Reference Manual :: 13.2.14 Set Operations with UNION, INTERSECT, and EXCEPT
13.2.14 Set Operations with UNION, INTERSECT, and EXCEPT SQL set operations combine the results of multiple query blocks into a single result. A query block, sometimes also known as a simple table, is any SQL statement that returns a result set, such as S
dev.mysql.com
'SQL' 카테고리의 다른 글
SQL | MySQL | 기본키, 고유키, 외래키 (1) | 2023.04.01 |
---|---|
SQL | MySQL | 서브쿼리 (Subquery) (0) | 2023.03.21 |
SQL | MySQL | JOIN - inner, left, right (0) | 2023.03.15 |
SQL | MySQL | Window Functions (2) - 집계 함수 (0) | 2023.03.10 |
SQL | MySQL | Window Functions (1) - 데이터 순위 (0) | 2023.03.09 |