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中文网其他相关文章!