SQL의 NOT IN
절과 NULL 값의 뉘앙스
SQL에서 자주 발생하는 문제는 특히 NULL이 있는 경우 데이터를 값 집합과 비교하는 것입니다. 몇 가지 예시 쿼리를 통해 이를 살펴보겠습니다.
<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이 NOT IN
절 내에서 NULL을 처리하는 방식에서 비롯됩니다.
SQL에서 NULL은 알 수 없거나 누락된 값을 나타냅니다. IN
및 NOT IN
같은 술어와의 상호 작용은 ANSI_NULLS
설정에 따라 결정됩니다.
ANSI_NULLS
을 활성화하면(기본값) IS NULL
또는 IS NOT NULL
을 사용하여 명시적으로 확인하지 않는 한 NULL과 관련된 비교는 UNKNOWN으로 평가됩니다.
쿼리 A에서 3을 NULL이 포함된 목록과 비교하면 3이 존재하므로 TRUE 평가가 됩니다. NULL 값은 전체 결과에 영향을 미치지 않습니다.
그러나 쿼리 B에서는 NOT IN
을 사용합니다. ANSI_NULLS
이 켜져 있으므로 3 NOT IN (1, 2, NULL)
비교는 3과 NULL 간의 비교로 인해 UNKNOWN으로 평가됩니다. 결과적으로 쿼리는 빈 집합을 반환합니다.
ANSI_NULLS
을 비활성화하면 이 내용이 변경됩니다. NULL은 다른 값처럼 처리됩니다. 이 시나리오에서 3 NOT IN (1, 2, NULL)
은 3이 1, 2 및 NULL과 다르기 때문에 TRUE로 평가됩니다. 따라서 쿼리 B는 ANSI_NULLS
off
이는 SQL에서 NULL을 처리할 때 ANSI_NULLS
설정의 중요성을 강조합니다. 이 설정을 관리하면 NULL과 관련된 조건자 동작을 제어하고 원하는 쿼리 결과를 얻을 수 있습니다.
위 내용은 'NOT IN'이 SQL에서 NULL 값과 함께 예기치 않은 결과를 반환하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!