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으로 확인합니다.