SQL 的 != 運算子與 NULL 難題
SQL 的 !=
(不等於)運算子在處理 NULL
值時提出了獨特的挑戰。 雖然它可以有效地比較非 NULL 值,但它與 NULL
的行為是違反直覺的。
!= NULL
考慮這個:
<code class="language-sql">SELECT * FROM MyTable WHERE MyColumn != NULL; -- Returns 0 rows SELECT * FROM MyTable WHERE MyColumn NULL; -- Also returns 0 rows</code>
這些查詢旨在查找 MyColumn
是 不是 NULL
的行,令人驚訝的是返回空結果集。這不是一個錯誤;而是一個錯誤。這是由於NULL
的本質。 NULL
不代表值;它代表值的缺失。 因此,使用 NULL
或 !=
將值與 =
進行比較總是會產生 UNKNOWN
,而不是 TRUE
或 FALSE
。
解:IS NOT NULL
要精確辨識非 NULL 值,請使用 IS NOT NULL
謂詞:
<code class="language-sql">SELECT * FROM MyTable WHERE MyColumn IS NOT NULL; -- Returns the expected rows</code>
IS NOT NULL
(及其對應的 IS NULL
)專為處理 SQL 比較中的 NULL
值而設計。
與非 NULL 值比較
與非 NULL 值進行比較時,!=
運算子如預期運作:
<code class="language-sql">SELECT * FROM MyTable WHERE MyColumn != 'ValueX'; -- Returns rows where MyColumn is not 'ValueX'</code>
重點
涉及NULL
值的精確SQL查詢需要使用IS NOT NULL
和IS NULL
。 避免使用 !=
或 =
進行 NULL
比較,以防止意外結果。 使用這些專用謂詞可以可靠地處理 SQL 語句中的 NULL
。
以上是為什麼 != 在 SQL 中與 NULL 比較時失敗?的詳細內容。更多資訊請關注PHP中文網其他相關文章!