데이터베이스/SQL

[DB] SQL SET연산자(집합연산자)_합집합 UNION,교집합 INTERSECT, 차집합 MINUS

박유린 2021. 10. 28. 20:07

SET 연산자 (집합연산자) : SELECT문들의 결과를 처리하는 방법으로 합집합, 교집합, 차집합 연산자가 있다.

  • UNION ALL을 제외하고 모두 SORD가 발생하므로, 메모리 소모가 적다.
  • 두 SELECT문은 컬럼의 개수, 위치 유형이 동일해야 한다.
  • 별칭(ALIAS)는 첫번째 SELECT문에 기술하면 된다.
  • 3개 이상의 SELECT문도 사용 가능하다. (위에서 아래로 처리된다.)
  • ORDER BY절은 맨 마지막에 기술한다.
  • SET연산자의 위치는 두 SELECT문 사이에 기술한다.

 

▶ 실습을 위한 테이블 2개를 생성

--EMP01테이블 : 부서번호 10, 30
CREATE TABLE EMP01 :  AS
    SELECT * FROM EMP WHERE DEPTNO IN (10,30);
--EMP02테이블 : 부서번호 30
CREATE TABLE EMP02 AS
    SELECT * FROM EMP WHERE DEPTNO = 30;
COMMIT;

 

1. UNION(합집합)  : SELECT1의 결과를 구하고 SELECT2를 처리해서 두결과를 하나로 합친다. (중복값 제거)
    UNOIN ALL  : UNOIN과 달리 중복값을 제거하지 않고 출력된다.

SELECT EMPNO, JOB, DEPTNO
FROM EMP01
UNION
SELECT EMPNO, JOB, DEPTNO
FROM EMP02;

SELECT EMPNO, JOB, DEPTNO
FROM EMP01
UNION ALL --중복제거 안함
SELECT EMPNO, JOB, DEPTNO
FROM EMP02;

 

2. INTERSECT(교집합)  : SELECT1문을 처리할때, 첫번째 필드를 기준으로 정렬시키면서 결과-레코드 집합을 구하고, 
                                          SELECT2문을 처리하고, 첫번째 필드를 기준으로 정렬시키면서 결과-레코드 집합을 구한후,
                                          두 SELECT문의 정렬된 결과-레코드 집합으로부터 공통된 결과-레코드만 추출하여 표시한다.

SELECT EMPNO, JOB, DEPTNO
FROM EMP01
INTERSECT
SELECT EMPNO, JOB, DEPTNO
FROM EMP02;

 

3. MINUS(차집합)  : SELECT1문의 내용에서 SELECT2문의 내용 중 공통된 부분을 제거한 나머지가 출력된다.

SELECT EMPNO, JOB, DEPTNO
FROM EMP01
MINUS
SELECT EMPNO, JOB, DEPTNO
FROM EMP02;