문제
다음 두 테이블에 대해 아래 SQL을 실행한 결과로 옳은 것은?
[상품]
| 상품ID |
|---|
| 1 |
| 2 |
| 3 |
[주문]
| 상품ID |
|---|
| 3 |
① 1 ② 1, 2 ③ (공집합) ④ 오류 발생
정답
2번
해설
NOT EXISTS 는 상관 서브쿼리가 한 건도 반환하지 않을 때 참이 되어 바깥 행을 남긴다. 상품ID 1·2 는 [주문]에 대응 행이 없어 서브쿼리가 공집합 → NOT EXISTS 참 → 결과에 포함. 상품ID 3 은 [주문]에 존재해 서브쿼리가 행을 반환 → NOT EXISTS 거짓 → 제외. 따라서 결과는 1, 2. → 정답 ②. ① 1만 나오는 경우는 없다(2도 대응 주문이 없음). ③ 공집합이 되려면 모든 상품이 주문에 있어야 한다. ④ 문법상 정상 실행된다. NOT IN 과 달리 NOT EXISTS 는 NULL 이 섞여도 예기치 않게 전체가 걸러지지 않는다는 점도 함께 기억해 둘 것.