>데이터 베이스 >MySQL 튜토리얼 >NULL 값은 NOT IN 절의 결과에 어떤 영향을 미칩니까?

NULL 값은 NOT IN 절의 결과에 어떤 영향을 미칩니까?

DDD
DDD원래의
2025-01-23 12:47:10453검색

How Do NULL Values Affect the Outcome of a NOT IN Clause?

NULL과 NOT IN 절 이해

NOT IN 절과 비교하여 LEFT JOIN 절을 사용할 때, 특히 NULL 값을 다룰 때 불일치가 자주 발생합니다. 두 가지 예제 쿼리를 통해 이를 살펴보겠습니다.

쿼리 A:

<code class="language-sql">SELECT 'true' WHERE 3 IN (1, 2, 3, NULL);</code>

쿼리 B:

<code class="language-sql">SELECT 'true' WHERE 3 NOT IN (1, 2, NULL);</code>

쿼리 A는 결과를 생성하지만 쿼리 B는 결과를 생성하지 않습니다. 이러한 차이점은 SQL이 NULL

과 관련된 비교를 처리하는 방식에서 비롯됩니다.

쿼리 분석

동작을 이해하기 위해 각 쿼리를 분석해 보겠습니다.

쿼리 A:

이 쿼리는 다음과 같이 단순화할 수 있습니다.

<code class="language-sql">SELECT 'true' WHERE 3 = 1 OR 3 = 2 OR 3 = 3 OR 3 = NULL;</code>

3 = 3TRUE으로 평가되므로 쿼리는 결과를 반환합니다.

쿼리 B:

이 쿼리는 다음과 같이 단순화됩니다.

<code class="language-sql">SELECT 'true' WHERE 3 != 1 AND 3 != 2 AND 3 != NULL;</code>

ANSI_NULLS을 활성화하면(대부분의 SQL 데이터베이스의 기본값) 3 != NULLUNKNOWN로 평가됩니다. AND가 포함된 UNKNOWN 조건은 전체 조건자가 UNKNOWN가 되어 반환되는 행이 없게 됩니다.

ANSI_NULLS이 비활성화된 경우 3 != NULLTRUE으로 평가되어 잠재적으로 행을 반환합니다.

결론

NULL 절 내에 NOT IN 값이 있으면 SQL의 세 값 논리(TRUE, FALSE, UNKNOWN)와 ANSI_NULLS 설정으로 인해 쿼리 결과에 큰 영향을 미칩니다. 예기치 않은 결과를 방지하려면 NULL 값으로 작업할 때 이 동작을 인식하는 것이 중요합니다. LEFT JOINIS NULL 검사를 사용하면 이러한 시나리오에서 NULL 값을 처리하기 위한 보다 안정적인 대안이 제공되는 경우가 많습니다.

위 내용은 NULL 값은 NOT IN 절의 결과에 어떤 영향을 미칩니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.