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 = 3
은 TRUE
으로 평가되므로 쿼리는 결과를 반환합니다.
쿼리 B:
이 쿼리는 다음과 같이 단순화됩니다.
<code class="language-sql">SELECT 'true' WHERE 3 != 1 AND 3 != 2 AND 3 != NULL;</code>
ANSI_NULLS
을 활성화하면(대부분의 SQL 데이터베이스의 기본값) 3 != NULL
은 UNKNOWN
로 평가됩니다. AND
가 포함된 UNKNOWN
조건은 전체 조건자가 UNKNOWN
가 되어 반환되는 행이 없게 됩니다.
ANSI_NULLS
이 비활성화된 경우 3 != NULL
는 TRUE
으로 평가되어 잠재적으로 행을 반환합니다.
결론
NULL
절 내에 NOT IN
값이 있으면 SQL의 세 값 논리(TRUE, FALSE, UNKNOWN)와 ANSI_NULLS
설정으로 인해 쿼리 결과에 큰 영향을 미칩니다. 예기치 않은 결과를 방지하려면 NULL
값으로 작업할 때 이 동작을 인식하는 것이 중요합니다. LEFT JOIN
및 IS NULL
검사를 사용하면 이러한 시나리오에서 NULL
값을 처리하기 위한 보다 안정적인 대안이 제공되는 경우가 많습니다.
위 내용은 NULL 값은 NOT IN 절의 결과에 어떤 영향을 미칩니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!