답변:
부울 논리-또는 3 가지 값 논리
x NOT IN (1, 2, NULL)
와 같다 NOT (x = 1 OR x = 2 OR x = NULL)
x <> 1 AND x <> 2 AND x <> NULL
true AND true AND unknown
** 와 동일unknown
**false
이 WHERE
조건을 통과하지 않기 때문에이 경우 와 거의 같습니다 ...이제 사람들이 EXISTS
+ NOT EXISTS
대신 IN
+를 사용하는 이유 NOT IN
입니다. 또한 참조 인덱스 관련 NOT 논리의 사용을 이상
** 참고 : 조건 의 식 끝에서 unknown
와 동일 합니다.
식을 평가하는 동안 알 수없는
이유는 아래의 @kgrittn의 설명을 참조하십시오.false
WHERE
NULL NOT IN (some_subquery)
행을 some_subquery
반환하지 않는 경우를 제외하고 외부 행을 반환해서는 안됩니다 . 그렇기 때문에 두 열 모두 Null을 사용할 수있는 경우 실행 계획이 훨씬 더 비쌀 수 있습니다. SQL Server 예
x <> NULL
를 해결하는FALSE
것으로NOT (x <> NULL)
평가하면로 평가할 것으로 예상TRUE
되지만 그렇지 않습니다. 둘 다로 평가됩니다UNKNOWN
. 요령은WHERE
(있는 경우) 절이 평가되는 경우 에만 행을 선택하는 것입니다. 절이 또는로TRUE
평가되면 행이 생략됩니다 . 이 동작 (일반적으로, 특히 술어에 대한)은 SQL 표준에 의해 규정됩니다.FALSE
UNKNOWN
NOT IN