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

2023. 3. 15. 16:40·SQL

 

 

✅ 예제 테이블 생성

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
'SQL' 카테고리의 다른 글
  • SQL | MySQL | 기본키, 고유키, 외래키
  • SQL | MySQL | 서브쿼리 (Subquery)
  • SQL | MySQL | JOIN - inner, left, right
  • SQL | MySQL | Window Functions (2) - 집계 함수
갬보리
갬보리
제발 코드정리좀 하자 (R, SQL, SAS, Python , etc...)
  • 갬보리
    보딩코
    갬보리
  • 전체
    오늘
    어제
    • 분류 전체보기 (50) N
      • R (32)
        • dplyr (7)
        • preprocessing (2)
        • EDA (0)
        • ggplot2 (10)
        • plotly (11)
        • leaflet (2)
      • SQL (15)
      • SAS (0)
      • Python (1)
        • preprocessing (0)
        • Library (0)
      • ETC (2) N
        • ML (1) N
  • hELLO· Designed By정상우.v4.10.3
갬보리
SQL | MySQL | 테이블 집합 연산 - UNION, UNION ALL 등
상단으로

티스토리툴바