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출력