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출력
집계함수 안에서 조건 부여 (0) | 2022.08.31 |
---|---|
MySQL auto_increment 값 변경 (0) | 2022.01.11 |
[MyBatis] MySQL의 DUPLICATE (0) | 2021.10.27 |
오라클 Keep 함수 (0) | 2021.07.11 |
계층형 쿼리 (0) | 2021.05.09 |