본문 바로가기

Learning/SQL

집합연산자 (UNION, INTERSECT, MINUS)

<집합연산자 (UNION, INTERSECT, MINUS)>

 

  • 집합 A(1,2,3), B(3,4,5)가 있다고 가정

  • UNION ALL : (1,2,3,3,4,5) 합집합. 중복을 포함한 결과의 합 검색

  • UNION: (1,2,3,4,5) 합집합. 중복을 제거한 결과의 합을 검색

  • INTERSECT: (3) 교집합. 양쪽 모두에서 포함된 행을 검색

  • MINUS: (1,2) 차집합. 첫 번째 검색 결과에서 두 번째 검색 결과를 제외한 나머지를 검색

1
2
3
4
SELECT 문
[UNION | UNION ALL | INTERSECT | MINUS]
SELECT 문
[ORDER BY 컬럼 [ASC/CESC];
cs

 

 

 

  • UNION: employees 테이블의 employee_id, job_id와 job_history 테이블의 employee_id, job_id를 중복을 제외하고 합하여 조회 (중복이 제외된 115개의 행이 출력됨)

1
2
3
4
5
SELECT employee_id, job_id
FROM employees
UNION
SELECT employee_id, job_id
FROM job_history;
cs

 

 

 

  • UNION ALL: employees 테이블의 employee_id, job_id와 job_history 테이블의 employee_id, job_id를 중복을 포함하고 합하여 조회 (중복을 포함 두 테이블의 모든 행을 합한 117개의 행이 출력됨)

1
2
3
4
5
SELECT employee_id, job_id
FROM employees
UNION ALL
SELECT employee_id, job_id
FROM job_history;
cs

 

 

 

  • INTERSECT: employees 테이블의 employee_id, job_id와 job_history 테이블의 employee_id, job_id의 중복된 값을 조회 (교집합 2행이 출력됨 (2행이 중복된다는 뜻))

1
2
3
4
5
SELECT employee_id, job_id
FROM employees
INTERSECT
SELECT employee_id, job_id
FROM job_history;
cs

 

 

 

 

  • MINUS: employees 테이블의 employee_id, job_id와 job_history 테이블의 employee_id, job_id의 중복된 값을 제외한 나머지 행을 조회 (차집합 105행이 출력됨)

1
2
3
4
5
SELECT employee_id, job_id
FROM employees
MINUS
SELECT employee_id, job_id
FROM job_history;
cs

 

 

 

 


 

 

<집합연산자 예제>

 

 

  • employees 테이블의 department_id 집합과 departments 테이블의 department_id 집합을 UNION 연산자를 이용해 합치기

1
2
3
4
5
SELECT department_id
FROM employees
UNION
SELECT department_id
FROM departments;
cs

 

 

  • employees 테이블의 department_id 집합과 departments 테이블의 department_id 집합을 UNION ALL 연산자를 이용해 합치기

1
2
3
4
5
SELECT department_id
FROM employees
UNION ALL
SELECT department_id
FROM departments;
cs

 

 

 

  • employees 테이블의 department_id 집합과 departments 테이블의 department_id 집합의 교집합을 INTERSECT 연산자를 이용해 합치기

1
2
3
4
5
SELECT department_id
FROM employees
INTERSECT
SELECT department_id
FROM departments;
cs

 

 

  • departments 테이블의 department_id 집합에서 employees 테이블의 department_id 집합을 MINUS 연산자를 이용해 빼보기

1
2
3
4
5
SELECT department_id
FROM departments
MINUS
SELECT department_id
FROM employees;
cs

 

 

 

'Learning > SQL' 카테고리의 다른 글

데이터 조작어(DML) - INSERT 데이터의 입력  (0) 2020.06.19
트랜잭션  (0) 2020.06.19
서브쿼리 - 다중열  (0) 2020.06.18
서브쿼리 - 다중행  (0) 2020.06.18
서브쿼리 - 단일행  (0) 2020.06.18