문제
회원 테이블과 주문이력 테이블이 있을 때, 주문을 한 번도 하지 않은 회원을 찾는 SQL로 가장 적절한 것은?
① SELECT * FROM 회원 M WHERE EXISTS (SELECT 1 FROM 주문 O WHERE M.회원ID = O.회원ID) ② SELECT * FROM 회원 M WHERE M.회원ID IN (SELECT 회원ID FROM 주문) ③ SELECT * FROM 회원 M WHERE NOT EXISTS (SELECT 1 FROM 주문 O WHERE M.회원ID = O.회원ID) ④ SELECT * FROM 회원 M, 주문 O WHERE M.회원ID = O.회원ID
정답
3번
해설
정답: 3. 주문이 존재하지 않는 회원을 찾으려면 NOT EXISTS를 사용하여 해당 회원의 주문 이력이 없는 경우를 조회한다.
오답 풀이
- 1번: 주문한 회원을 찾는다.
- 2번: 주문한 회원을 찾는다.
- 3번: 주문 이력이 없는 회원을 찾는다.
- 4번: 회원과 주문을 조인하므로 주문한 회원만 조회된다.
보충 개념 미존재 데이터를 찾을 때는 NOT EXISTS가 자주 사용된다. NOT IN은 서브쿼리 결과에 NULL이 포함될 때 예상과 다른 결과가 나올 수 있다.