문제
다음 NOT EXISTS를 NOT IN으로 변환한 것으로 올바른 것은?
SQLSELECT 제품코드 FROM 제품 A WHERE NOT EXISTS (SELECT 1 FROM 주문 B WHERE A.제품코드=B.제품코드);
① WHERE 제품코드 NOT IN (SELECT 제품코드 FROM 주문) ② WHERE 제품코드 NOT IN (SELECT 제품코드 FROM 주문 WHERE 제품코드 IS NOT NULL) ③ WHERE NOT (제품코드 IN (SELECT 제품코드 FROM 주문)) ④ WHERE 제품코드 NOT IN (SELECT DISTINCT 제품코드 FROM 주문)
정답
2번
해설
②가 정답입니다. NOT EXISTS를 NOT IN으로 변환할 때 주의할 점은 서브쿼리에 NULL이 있으면 NOT IN의 결과가 달라진다는 것입니다. NOT EXISTS는 NULL을 무시하지만 NOT IN은 NULL이 있으면 모든 결과가 FALSE가 됩니다. 따라서 WHERE 제품코드 IS NOT NULL 조건을 추가해야 합니다.