문제
다음 NOT EXISTS를 NOT IN으로 변환할 때 가장 주의해야 할 사항은?
SQLSELECT 사원번호 FROM 사원 A WHERE NOT EXISTS ( SELECT 1 FROM 휴가신청 B WHERE A.사원번호 = B.사원번호 AND B.승인상태 = 'Y' );
① NOT IN 서브쿼리에서 DISTINCT를 반드시 사용해야 함 ② NOT IN 서브쿼리 결과에 NULL이 포함되면 예상과 다른 결과 발생 ③ NOT IN은 상관 서브쿼리로 변환할 수 없음 ④ NOT IN 서브쿼리에는 WHERE 조건을 포함할 수 없음
정답
2번
해설
②가 정답입니다. NOT IN에서 서브쿼리 결과에 NULL이 포함되면, NULL과의 비교는 UNKNOWN이 되어 전체 결과가 공집합이 될 수 있습니다. NOT EXISTS는 NULL에 영향받지 않으므로 변환 시 주의가 필요합니다. ①DISTINCT는 필수가 아니며, ③상관 서브쿼리 변환이 불가능한 것은 아니고, ④WHERE 조건 포함은 가능합니다.