[ORACLE] 오라클 SELECT 중복값 제거 하기(MINUS 연산자)
- 데이터베이스/Oracle
- 2020. 6. 16.
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);
'데이터베이스 > Oracle' 카테고리의 다른 글
[Oracle] 오라클 ORA-00911 문자가 부적합합니다. 해결방법 (0) | 2020.06.27 |
---|---|
[ORACLE] 오라클 뷰(view) 사용법(조회,생성,수정,삭제) (0) | 2020.06.26 |
[ORACLE] 오라클 데이터 복구 TIMESTAMP 사용법 (0) | 2020.06.08 |
[ORACLE] 오라클 NVL, NVL2 사용법 및 차이점(NULL 처리) (0) | 2020.06.06 |
[Oracle] 오라클 버전 확인 방법 (0) | 2020.06.05 |