SQL의 NULL 값과 NOT IN
절의 예기치 않은 동작 이해
SQL 쿼리는 NULL
값이 NOT IN
연산자와 상호 작용할 때 종종 놀라운 결과를 생성합니다. 이러한 불일치는 NOT IN
쿼리를 LEFT JOIN
.
다음 검색어를 고려하세요.
<code class="language-sql">A: select 'true' where 3 in (1, 2, 3, null) B: select 'true' where 3 not in (1, 2, null)</code>
쿼리 A는 결과를 반환하지만 쿼리 B는 결과를 반환하지 않습니다. 근본 원인은 다양한 SQL 데이터베이스가 NULL
값
ANSI_NULLS
을 활성화하면(SQL Server 2005와 같은 많은 시스템의 기본값) NULL
과 같이 3 = NULL
과 관련된 모든 비교는 UNKNOWN
로 평가됩니다. 이러한 불확정성은 NULL
.
쿼리 B에서 NOT IN
연산자는 하위 쿼리에서 NULL
을 발견하여 UNKNOWN
평가를 수행합니다. 일치하는 다른 값이 없으므로 전체 조건자는 UNKNOWN
가 되어 빈 결과 집합이 생성됩니다.
반대로 ANSI_NULLS
를 비활성화하면 동작이 변경됩니다. ANSI_NULLS
을 끄면 3 = NULL
는 TRUE
으로 평가됩니다. SQL은 NULL
자신을 포함한 모든 것과 잠재적으로 동일하다고 해석합니다. 결과적으로 쿼리 B의 조건자는 TRUE
으로 평가되어 결과를 반환합니다.
요컨대, 일관되지 않은 결과는 NULL
설정에 따라 결정된 ANSI_NULLS
값을 다양하게 처리하기 때문에 발생합니다. ANSI_NULLS
이 켜져 있으면 NULL
과의 비교로 UNKNOWN
이 생성되어 NOT IN
및 NULL
값을 활용하는 쿼리에서 예상치 못한 결과가 발생합니다. 이는 NULL
정확한 쿼리 결과를 얻기 위해 SQL 처리
위 내용은 SQL의 NOT IN 절에서 NULL 값으로 인해 예기치 않은 결과가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!