[Oracle] 데이터 존재여부를 확인하는 EXISTS / NOT EXISTS

프로그래밍을 하다보면 데이터가 존재할 경우 / 존재하지 않을경우 특정 액션을 해야하는 상황이 종종 발생합니다.. 이럴때는 EXISTS를 사용하면 편리합니다.

 

EXISTS문 사용법

SELECT 컬럼
FROM 테이블
WHERE EXISTS / NOT EXISTS
(서브쿼리);

EXISTS의 기본 사용법은 위와같습니다. EXISTS은 논리연산자 중의 하나로써 후행 조건절로 서브쿼리 형태로만 올 수 있습니다.

 

 EXISTS문 예제 

예제 테이블 & 데이터

예제 테이블

위와같은 MASTER DETAIL (1 : N) 테이블 구조를 가진 두개의 테이블과 만들고 데이터를 넣도록 하겠습니다. EXISTS문은 위와같은 MASTER - DETAIL (1 : N) 구조로 이루어진 테이블에서 많이 쓰입니다. 테이블에는 각각 위와같이 데이터가 저장되어 있습니다.

 

COMPANY_DTL에 데이터가 있는 COMPANY_MST 데이터 출력

SELECT * FROM COMPANY_MST MST
WHERE EXISTS
(
    SELECT * FROM COMPANY_DTL DTL
    WHERE MST.COMPANY_CODE = DTL.COMPANY_CODE 
)

예제 데이터1

COMPANY_CODE를 공유하고있는 1,2 삼성전자와 현대차만 출력됩니다.

 

COMPANY_DTL에 데이터가 없는 COMPANY_MST 데이터 출력

SELECT * FROM COMPANY_MST MST
WHERE NOT EXISTS
(
    SELECT * FROM COMPANY_DTL DTL
    WHERE MST.COMPANY_CODE = DTL.COMPANY_CODE 
)

예제 데이터2

반대로 DTL에 데이터가 없는 MST만 뽑고 싶으시다면 NOT EXISTS를 사용하시면 됩니다.

 

COMPANY_DTL에 데이터가 없는 COMPANY_MST 데이터 삭제

DELETE FROM COMPANY_MST MST
WHERE NOT EXISTS
(
    SELECT * FROM COMPANY_DTL DTL
    WHERE MST.COMPANY_CODE = DTL.COMPANY_CODE 
)

MASTER - DETAIL 구조에서 DETAIL에 데이터가 없는 MASTER는 의미가 없는 데이터라 판단하고 위와 같이 삭제를 많이합니다.

댓글

Designed by JB FACTORY