새소식

SQL

SQL | MySQL | 테이블 집합 연산 - UNION, UNION ALL 등

  • -

 

 

✅ 예제 테이블 생성

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)

 

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.