청구가 한 건도 없는 계약을 찾는 다음 SQL 이 0행을 반환했다. 청… | [SQLD] SQL 개발자 기출유형 모의고사 10회 상세 페이지

1[SQLD] SQL 개발자 기출유형 모의고사 10회
청구가 한 건도 없는 계약을 찾는 다음 SQL 이 0행을 반환했다. 청구.계약번호에 NULL 이 있기 때문일 때, 해결 방법으로 적절하지 않은 것은?
SELECT 계약번호
  FROM 계약
 WHERE 계약번호 NOT IN (SELECT 계약번호 FROM 청구);
1
<> ALL 로 바꾼다
2
NOT EXISTS 로 바꾼다
3
서브쿼리에 IS NOT NULL 을 건다
4
LEFT JOIN 후 IS NULL 로 거른다
해설

<> ALL 은 NOT IN 과 같은 뜻이라 서브쿼리 결과에 NULL 이 있으면 비교가 UNKNOWN 이 되어 여전히 0행이다.

NOT IN (a, NULL) 은 x <> a AND x <> NULL 로 풀리는데, 뒤쪽이 항상 UNKNOWN 이라 전체가 참이 될 수 없다.

  • 서브쿼리에서 NULL 을 걸러 내면 비교 대상에 NULL 이 없어 정상 동작한다.
  • NOT EXISTS 는 행 존재 여부만 보므로 NULL 의 영향을 받지 않는다.
  • LEFT JOIN 후 청구 쪽 키가 NULL 인 행만 고르면 청구 없는 계약이 남는다.

오류나 개정된 내용이 보이면 알려주세요

이어서 풀어보기

[SQLD] SQL 개발자 기출유형 모의고사 10회 50문항 이어서 보기문제·정답·해설을 한 페이지에서 이어서 볼 수 있어요SQLD SQL 개발자 실전 모의고사 암기장 전체 보기