SQL- 집합연산자

박현·2022년 10월 18일
0

SQL

목록 보기
21/34
  • 집합연산자를 사용하면 조인을 사용하지 않고도 연관된 데이터를 조회할 수 있다.

  • 집합연산자는 여러개의 결과 집합 간의 연산을 통해 결합하는 방식을 사용한다. 즉 집합연산자는 2개이상의 질의 결과를 하나의 결과로 만들어준다.

  • 튜닝 관점에서 실행계획을 분리하고자 하는 목적으로도 사용할 수 있다.

  • 집합연산자를 사용하기 위해서는 아래의 조건을 만족해야 한다.

    1. SELECT절의 컬럼수가 동일해야한다.
    2. SELECT절의 동일 위치에 존재하는 컬럼의 데이터 타입이 동일해야 한다.

집합연산자는 총 4가지로 구성되어있다 하나씩 살펴보도록 하자.

1. UNION

: 개별 SQL문의 결과에 대해 합집합 연산을 수행한다. 단 결과에서 모든 중복된 행은 하나의 행으로 만든다.

부서가 10번인 사람들의 집합과 직업이 매니저인 사람들의 집합의 합집합
(중복은 제거)

입력✏️

SELECT DEPTNO
      ,ENAME
      ,JOB
  FROM EMP
 WHERE JOB='MANAGER'
UNION 
SELECT DEPTNO
      ,ENAME
      ,JOB
  FROM EMP
 WHERE DEPTNO=10;

출력💻


2. UNION ALL

: 개별 SQL문의 결과에 대해 합집합 연산을 수행하며 중복된 행도 그대로 출력된다.

부서가 10번인 사람들의 집합과 직업이 매니저인 사람들의 집합의 합집합
(중복포함)

입력✏️

SELECT DEPTNO
      ,ENAME
      ,JOB
  FROM EMP
 WHERE JOB='MANAGER'
UNION ALL
SELECT DEPTNO
      ,ENAME
      ,JOB
  FROM EMP
 WHERE DEPTNO=10;

출력💻


3. INTERSECT

: 개별 SQL문의 결과에 대해 교집합 연산을 수행한다. 단, 결과에서 모든 중복된 행은 하나의 행으로 만든다.
INTERSECT연산자는 EXISTS 또는 IN 서브쿼리를 이용한 SQL문으로 변경이 가능하다.

부서번호가 10번인 사람들의 집합과 직업이 매니저인 집합의 교집합을 출력
즉, 부서번호가 10번이면서 직업이 매니저인 사람을 출력

입력✏️

SELECT DEPTNO
      ,ENAME
      ,JOB
  FROM EMP
 WHERE DEPTNO=10
INTERSECT
SELECT DEPTNO
      ,ENAME
      ,JOB
  FROM EMP
 WHERE JOB='MANAGER';

출력💻


4. EXCEPT (Oracle: MINUS, SQL Server:EXCEPT)

: 개별 SQL문의 결과에 대해 차집합 연산을 수행한다. 단 결과에서 중복된 행은 하나의 행으로 만든다.
NOT EXISTS 또는 NOT IN 서브쿼리를 이용한 SQL으로도 변경이 가능하다.

부서가 10번인 사람들의 집합과 직업이 매니저인 사람들의 집합의 차집합
즉, 부서번호가 10번인 사람들중에서 직업이 매니저가 아닌 사람의 정보를 출력

입력✏️

SELECT DEPTNO
      ,ENAME
      ,JOB
  FROM EMP
 WHERE DEPTNO=10
MINUS
SELECT DEPTNO
      ,ENAME
      ,JOB
  FROM EMP
 WHERE JOB='MANAGER';

출력💻


참고자료: SQL전문가가이드

0개의 댓글