> 데이터 베이스 > MySQL 튜토리얼 > SQL의 NOT IN 절에서 NULL 값으로 인해 예기치 않은 결과가 발생하는 이유는 무엇입니까?

SQL의 NOT IN 절에서 NULL 값으로 인해 예기치 않은 결과가 발생하는 이유는 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2025-01-23 12:31:09
원래의
864명이 탐색했습니다.

Why Do NULL Values Cause Unexpected Results with SQL's NOT IN Clause?

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 = NULLTRUE으로 평가됩니다. SQL은 NULL 자신을 포함한 모든 것과 잠재적으로 동일하다고 해석합니다. 결과적으로 쿼리 B의 조건자는 TRUE으로 평가되어 결과를 반환합니다.

요컨대, 일관되지 않은 결과는 NULL 설정에 따라 결정된 ANSI_NULLS 값을 다양하게 처리하기 때문에 발생합니다. ANSI_NULLS이 켜져 있으면 NULL과의 비교로 UNKNOWN이 생성되어 NOT INNULL 값을 활용하는 쿼리에서 예상치 못한 결과가 발생합니다. 이는 NULL 정확한 쿼리 결과를 얻기 위해 SQL 처리

를 이해하는 것이 중요함을 강조합니다.

위 내용은 SQL의 NOT IN 절에서 NULL 값으로 인해 예기치 않은 결과가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿