본문 바로가기

Database/SQL

[oracle] EXISTS, NOT EXISTS

실제로 사용해본 것은 IN 뿐이었는데 EXISTS 라는 함수도 있다는 것을 알게 되었다.

사용법은 비슷한 것 같은데 뭐가 다른지 궁금해서 정리해봄.


EXISTS 는 서브쿼리만 사용 가능하며, IN은 서브쿼리 + 단순 값도 사용가능하다.

1. NOT IN, NOT EXISTS 효과적인 튜닝방법

-데이터 제한 조건은 인덱스 사용

-데이터 불러오는 양 적게

-사용자 ORACLE FUNCTION은 자제

-NOT EXISTS보다는 EXISTS 사용 권장

 

2. EXISTS 실행조건

SELECT COLUMNS 
FROM TABLE
WHERE EXISTS (subquery);
SELECT *
FROM TEST A
WHERE EXISTS (SELECT *
		FROM TEST2 B
		WHERE A.id = B.id)

서브쿼리에 만족하는 모든 레코드를 반환한다.

 

3. EXISTS와 IN 차이점

-EXISTS : 단지 해당 ROW가 존재하는지만 확인하고, 더 이상 수행하지 않음

-IN : 실제 존재하는 데이터들의 모든 값까지 확인

*NOT IN을 사용할 때 조건에 맞는 데이터가 있어도 NULL인 값은 불러오지 않으므로 NVL처리 필요

 

간단히 존재여부만 확인하는 거라면 더 가벼운 EXIST를 사용하는 것이 좋을 듯. 내검할 때 맨날 IN으로 사용했는데 이제 EXISTS로 써봐야겠다. 

 

<!--참고 글 링크--!>

https://javafactory.tistory.com/522

 

반응형

'Database > SQL' 카테고리의 다른 글

[oracle] 테이블 n개만 뽑기  (0) 2019.07.23
[oracle] PIVOT, UNPIVOT  (0) 2019.07.21
[oracle] INSTR  (0) 2019.07.21
[oracle] Merge문  (0) 2019.07.07
[oracle] NVL, NVL2, NULLIF  (0) 2019.07.07