집 >데이터 베이스 >MySQL 튜토리얼 >SQL의 NOT IN 절에서 NULL 값으로 인해 예기치 않은 결과가 발생하는 이유는 무엇입니까?
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!