首頁 >資料庫 >mysql教程 >NULL 值如何影響 NOT IN 子句的結果?

NULL 值如何影響 NOT IN 子句的結果?

DDD
DDD原創
2025-01-23 12:47:10464瀏覽

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 = 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。 帶有 ANDUNKNOWN 條件會導致整個謂詞為 UNKNOWN,導致不傳回任何行。

如果 ANSI_NULLS 被停用,3 != NULL 的計算結果為 TRUE,可能會傳回一行。

結論

由於 SQL 的三值邏輯(TRUE、FALSE、UNKNOWN)以及 NULL 的設置,NOT IN 子句中 ANSI_NULLS 值的存在會顯著影響查詢結果。 在使用 NULL 值時,了解這種行為至關重要,以避免意外結果。 在這種情況下,使用 LEFT JOINIS NULL 檢查通常可以為處理 NULL 值提供更可靠的替代方案。

以上是NULL 值如何影響 NOT IN 子句的結果?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn