본문 바로가기
IT/Database

[Oracle] EXISTS, NOT EXISTS

by 성준하이 2023. 2. 8.
반응형

결론을 먼저 말하면

EXISTS(서브 쿼리)는 서브 쿼리의 결과가 "한 건이라도 존재하면" TRUE 없으면 FALSE를 리턴한다. 
EXISTS는 서브 쿼리에 일치하는 결과가 한 건이라도 있으면 쿼리를 더 이상 수행하지 않는다.

말로하는 설명이 좀 이해가 안가서 이해하기 쉽도록 그림으로 설명을 하면

 

아래 표가 있다.

그리고 아래 쿼리가 돌아가면 아래의 결과가 나온다.

서브쿼리 테이블에 존재하는 값들만 조인 조건을 기준으로 같은 값이 있는 경우의 값들만 보여준다.

 

그리고 select 1 의 의미는 select 을 빈 값으로 둘 수 없어서 기입을 해둔것이며 , 1이 출력되거나 하지는 않는다.

 

반대로 NOT EXISTS 의 경우는 차집합 개념으로 없는 데이터를 출력해준다.

 

in 절과 비교

이렇게 되면 in절과 비슷하다고 느낄수 있으나 

IN은 서브쿼리 결과를 모두 수행하고, EXISTS는 일치하는 결과가 있으면 더 이상 수행하지 않는다.

서브 쿼리 테이블(dept_history)에 데이터량이 많으면 EXISTS를 사용하는것이 성능이 좋다.

 

 

join 절과 비교

EXISTS의 서브 쿼리를 메인 쿼리 JOIN으로 변경할 경우 위와 같이 중복된 데이터 나올 수 있으니 주의해야 한다.

JOIN을 사용하는것이 성능상 좋을 수 있으나 메인 쿼리와 서브 쿼리의 데이터가 1:1일 경우 가능하다.

 

반응형

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

[Oracle] 계층형 쿼리 사용법  (13) 2023.02.22
[Oracle] ORA-00001: unique constraint () violated ERROR  (10) 2023.02.17
NVL함수  (9) 2023.01.15
[Oracle] case 문  (10) 2023.01.12
프로시져와 함수의 차이  (13) 2023.01.06

댓글