[Oracle] 오라클 MINUS 사용법 (차집합, EXCEPT)
- 데이터베이스/오라클
- 2022. 7. 20.
오라클에서 MINUS 연산자를 사용하면 서로 다른 쿼리문에서 차집합의 데이터를 구할 수 있다. MINUS 연산자는 다른 데이터베이스의 EXCEPT 연산자와 비슷한 기능을 하며, 중복 값이 제거된 차집합 데이터가 반환된다는 것을 숙지해야 한다. MINUS 연산자를 사용하여 쿼리문을 작성하면 직관성을 좋지만 성능에 이슈가 발생하는 경우가 많다. 성능 이슈가 발생하면 NOT EXISTS 연산자로 쿼리문을 변경하는 것도 성능 향상에 좋은 방법이다.
목차 |
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건만 조회된다.
아래의 UNION, UNION ALL, INTERSECT 포스팅을 참고하면 집합 연산자를 조금 더 쉽게 이해할 수 있다.