[Oracle] 데이터 존재여부를 확인하는 EXISTS / NOT EXISTS
- DB/Oracle
- 2019. 11. 18.
프로그래밍을 하다보면 데이터가 존재할 경우 / 존재하지 않을경우 특정 액션을 해야하는 상황이 종종 발생합니다.. 이럴때는 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
)
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
)
반대로 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는 의미가 없는 데이터라 판단하고 위와 같이 삭제를 많이합니다.
'DB > Oracle' 카테고리의 다른 글
[Oracle] 오라클 문자열 합치기(||, CONCAT) 사용법 & 예제 (0) | 2019.11.20 |
---|---|
[Oracle] 문자열 자르기 / 구분자로 자르기 (SUBSTR, INSTR) 사용법 & 예제 (4) | 2019.11.19 |
[Oracle] MERGE INTO 사용법 데이터가 있으면 UPDATE 없으면 INSERT (0) | 2019.11.17 |
[Oracle] 오라클 DELETE문(삭제) 사용법 & 예제 (0) | 2019.11.16 |