Development/DB

EXISTS, NOT EXISTS 사용

루루지 2021. 11. 22. 21:42
반응형

IN과 비슷한 점이 있지만,

큰 차이점은 EXISTS(서브 쿼리)는 서브 쿼리의 결과가 한건이라도 존재하면 결과 값을 리턴한다.

 

USER
ID NAME
1 KIM
2 PARK
SAMPLE
ID USER_ID STATE
1 1 1
2 1 0
# NOT EXISTS 사용
SELECT COUNT(*) FROM USER U 
WHERE NOT EXISTS (SELECT 1 FROM SAMPLE S
                   WHERE U.ID = S.USER_ID AND S.STATE=1);
결과: 0 
설명
EXISTS 내부의 서브쿼리에서 SAMPLE과 일치하는 USER_ID 중에
SAMPLE테이블의 STATE필드 값이 하나라도 STATE=1이 있으면 제외 한다는 뜻.


# IN 사용
SELECT COUNT(*) FROM USER U 
WHERE U.ID IN (SELECT 1 FROM SAMPLE S
                   WHERE U.ID = S.USER_ID AND S.STATE=1);
결과: 1
설명
IN은 해당 로우에 대한 데이터를 다 돌리기때문에 STATE=1인 것이 하나 있으므로 1출력