[ORACLE] 오라클 SELECT 중복값 제거 하기(MINUS 연산자)

MINUS 연산자를 사용하여 데이터 비교하기

 

안녕하세요 주니어녕입니다.

 

오늘은 두테이블 간의 차이가 있는 데이터를 찾는 방법을 알아보겠습니다.

 

MINUS 연산자

- 대상이 되는 테이블의 공통된 항목을 제외한 결과를 보여줍니다.

- 데이터의 타입, 순서, 갯수는 일치해야 합니다.

- 첫번째 대상이되는 테이블 - 두번째 대상이 되는 테이블

 

이해가 되셨나요?

쿼리로 확인해보겠습니다.

 

샘플데이터를 만들어 볼게요.

WITH CODE1 AS
(
 SELECT 'code_1' AS userId  FROM DUAL UNION ALL
 SELECT 'code_2' AS userId  FROM DUAL UNION ALL
 SELECT 'code_3' AS userId  FROM DUAL UNION ALL
 SELECT 'code_4' AS userId  FROM DUAL
)
, CODE2 AS
(
 SELECT 'code_1' AS userId  FROM DUAL UNION ALL
 SELECT 'code_2' AS userId  FROM DUAL UNION ALL
 SELECT 'code_3' AS userId  FROM DUAL
)

CODE1 테이블의 조회결과입니다.

 

CODE2 테이블의 조회결과입니다.

 

두 테이블의 userID 컬럼의 겹치지 않는 데이터가 보이시나요? 

code_4 데이터는 CODE1테이블에는 존재하지만

CODE2테이블에는 존재하지 않습니다.

 

두 테이블간에 겹치지 않는데이터를 조회할떄

NOT IN 등 SQL 문법을 사욜 할 수 있습니다. 아래 쿼리로 첨부해놓을게요.

하지만 MINUS를 사용하면 더 간단하게 조회할 수 있습니다.

 

MINUS 문법

SELECT * FROM CODE1
MINUS
SELECT * FROM CODE2

MINUS 쿼리 결과

MINUS 예제 풀 쿼리

WITH CODE1 AS
(
 SELECT 'code_1' AS userId  FROM DUAL UNION ALL
 SELECT 'code_2' AS userId  FROM DUAL UNION ALL
 SELECT 'code_3' AS userId  FROM DUAL UNION ALL
 SELECT 'code_4' AS userId  FROM DUAL
)
, CODE2 AS
(
 SELECT 'code_1' AS userId  FROM DUAL UNION ALL
 SELECT 'code_2' AS userId  FROM DUAL UNION ALL
 SELECT 'code_3' AS userId  FROM DUAL
)

SELECT * FROM CODE1
MINUS
SELECT * FROM CODE2

 

NOT IN 문법을 사용할 경우

SELECT * FROM CODE1 
where userId NOT IN (select userId from code2);

댓글

Designed by JB FACTORY