Semi Join

EXISTS와 IN의 사고방식

둘 다 존재 여부를 표현할 수 있지만, EXISTS는 “상대 행이 있나”를 묻고 IN은 “목록 안에 값이 있나”를 묻습니다.

EXISTS: 존재 검사
IN: 목록 비교
실행 계획 확인
EXISTS

하나 찾으면 충분

상관 조건을 만족하는 행이 존재하면 TRUE입니다. DBMS는 종종 semi join으로 최적화합니다.

IN

반환 목록과 비교

서브쿼리의 단일 열 결과 목록에 외부 값이 포함되는지 확인합니다.

외부 행

user_id = 7

현재 회원을 기준으로 조건을 평가합니다.

서브쿼리

orders에서 탐색

o.user_id = 7인 주문이 있는지 찾습니다.

결과

TRUE / FALSE

행을 보여줄지 말지 결정합니다.

실제 실행 방식은 DBMS와 실행 계획에 따라 달라질 수 있으므로, 대량 데이터에서는 EXPLAIN으로 확인합니다.