[Oracle] 오라클 MINUS 사용법 (차집합, EXCEPT)

오라클에서 MINUS 연산자를 사용하면 서로 다른 쿼리문에서 차집합의 데이터를 구할 수 있다. MINUS 연산자는 다른 데이터베이스의 EXCEPT 연산자와 비슷한 기능을 하며, 중복 값이 제거된 차집합 데이터가 반환된다는 것을 숙지해야 한다. MINUS 연산자를 사용하여 쿼리문을 작성하면 직관성을 좋지만 성능에 이슈가 발생하는 경우가 많다. 성능 이슈가 발생하면 NOT EXISTS 연산자로 쿼리문을 변경하는 것도 성능 향상에 좋은 방법이다.

 

오라클 MINUS 사용법

목차
  1. MINUS 기본 사용법
  2. MINUS를 여러 번 사용하는 방법
  3. MINUS는 중복이 제거된 차집합을 반환

 

MINUS 기본 사용법

SELECT empno, ename, job, deptno
  FROM emp
 WHERE sal > 2500
 MINUS 
SELECT empno, ename, job, deptno
  FROM emp
 WHERE deptno = 10

 

 

MINUS 연산자를 사용할 때는 MINUS 연산자를 사용하여 쿼리문을 위아래로 연결하면 된다.

연결된 두 쿼리문은 SELECT 절의 칼럼 개수와 데이터 유형이 일치해야 한다.

 

첫 번째 쿼리문에서 두 번째 쿼리 문과 중복된 데이터를 제외한 첫 번째 쿼리 문의 데이터가 조회된다.

첫 번째 쿼리문에서 두 번째 쿼리문을 뺀다고 생각하면 된다.

 

MINUS를 여러 번 사용하는 방법

SELECT empno, ename, job, deptno
  FROM emp
 WHERE sal > 2500
 MINUS 
SELECT empno, ename, job, deptno
  FROM emp
 WHERE deptno = 10
 MINUS 
SELECT empno, ename, job, deptno
  FROM emp
 WHERE deptno = 30

 

 

MINUS 연산자를 여러 번 사용할 경우 첫 번째 쿼리 문의 결과에서 두 번째, 세 번째 쿼리 문의 중복 데이터를 모두 제외하고 조회한다고 생각하면 된다.

 

결과 = (첫 번째 쿼리문 - 두 번째 쿼리문) - 세 번째 쿼리문

 

MINUS는 중복이 제거된 차집합을 반환

SELECT a.deptno, b.dname
  FROM emp a, dept b
 WHERE a.sal > 2500
   AND a.deptno = b.deptno
 MINUS
SELECT deptno, dname
  FROM dept
 WHERE deptno IN (10, 30)

 

 

MINUS 연산자는 차집합의 결과에서 중복이 제거된 데이터를 반환한다.

RESEARCH(20) 부서가 여러 건 조회되었지만 중복을 제거하고 1건만 조회된다.

예제쿼리(테이블포함).txt
0.00MB

 

아래의 UNION, UNION ALL, INTERSECT 포스팅을 참고하면 집합 연산자를 조금 더 쉽게 이해할 수 있다.

 

[오라클] UNION, UNION ALL 사용법 (합집합)

오라클에서 여러 개의 SELECT 문 결과를 합치기 위해서는 UNION, UNION ALL을 사용하면 된다. UNION을 사용할 경우 합쳐진 결과에서 중복을 제거한 결과를 반환하고, UNION ALL을 사용하면 중복을 제거하지

gent.tistory.com

 

[오라클] INTERSECT 사용법 (교집합)

오라클에서 서로 다른 쿼리문에서 중복 값이 제거된 교집합 데이터를 조회하기 위해서는 INTERSECT 연산자를 사용하면 된다. 자주 사용하는 UNION ALL과 사용법은 비슷하지만 UNION ALL은 합집합을 반

gent.tistory.com

 

[오라클] EXISTS, NOT EXISTS 사용법

오라클에서 EXISTS( ) 함수를 처음 접하면 조금 어려움 느낌이 들 수도 있다. EXISTS를 사용하지 않아도 비슷한 결과를 만들 수 있는 기능이 많기 때문에, EXISTS에 대해 자세히 익히지 않고 넘어가는

gent.tistory.com

 

댓글

Designed by JB FACTORY