My Space

반응형

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

 

'Development > DB' 카테고리의 다른 글

집계함수 안에서 조건 부여  (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

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading