문제
계약이 없는 고객을 찾는 SQL로 가장 적절한 것은?
① SELECT * FROM 고객 C WHERE EXISTS (SELECT 1 FROM 계약 K WHERE K.고객ID = C.고객ID) ② SELECT * FROM 고객 C WHERE NOT EXISTS (SELECT 1 FROM 계약 K WHERE K.고객ID = C.고객ID) ③ SELECT * FROM 고객 C WHERE 고객ID = NULL ④ SELECT * FROM 고객 C WHERE 계약ID IS NOT NULL
정답
2번
해설
정답: 2. 계약 테이블에 해당 고객의 계약이 존재하지 않는 고객을 찾으려면 NOT EXISTS를 사용한다.
오답 풀이
- 1번: 계약이 있는 고객을 찾는다.
- 2번: 계약이 없는 고객을 찾는다.
- 3번: NULL 비교는 = NULL이 아니라 IS NULL을 사용해야 하며 의미도 다르다.
- 4번: 고객 테이블에 계약ID가 있다는 전제가 없고 계약이 있는 경우에 가깝다.
보충 개념 NOT EXISTS는 상관 서브쿼리 결과가 존재하지 않을 때 TRUE가 된다. 미존재 데이터를 찾을 때 자주 사용된다.