MySQL:了解 NULL 值比較
概述:
有效地使用 MySQL 需要清楚地了解 NULL 值在比較操作中的行為。本文重點在於使用 !=
(不等於)運算子時 NULL 值的行為。
問題:
假設一個表包含一個允許 NULL 值的 CODE
欄位。即使使用了 CODE
,為什麼下面的查詢會省略 !=
為 NULL 的行?
<code class="language-sql">SELECT * FROM TABLE WHERE CODE!='C'</code>
解:
當將非 NULL 值與 NULL 進行比較時,MySQL 的 !=
運算子不會產生 true/false 結果。 比較被認為是不確定的。
要正確處理 NULL,請使用 IS NULL
或 IS NOT NULL
。以下查詢精確排除 CODE
等於「C」或 NULL 的行:
<code class="language-sql">SELECT * FROM TABLE WHERE CODE IS NULL OR CODE!='C'</code>
此方法確保獨立評估兩個條件,僅排除滿足任一條件的行。
進一步說明:
雖然有時會在 MySQL 文件或論壇中看到,但 CODE != ''
並不能取代 CODE IS NOT NULL
。 !=
運算子比較值; IS NULL
檢查是否缺少值。
因此,這些查詢不等價:
<code class="language-sql">SELECT * FROM TABLE WHERE CODE != '' SELECT * FROM TABLE WHERE CODE IS NOT NULL</code>
使用 IS NULL
和 IS NOT NULL
確保正確處理和測試 MySQL 查詢中的 NULL 值。
以上是為什麼 MySQL 的 `!=` 運算子會排除具有 NULL 值的行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!