首页 >数据库 >mysql教程 >为什么 MySQL 的 `!=` 运算符排除具有 NULL 值的行?

为什么 MySQL 的 `!=` 运算符排除具有 NULL 值的行?

Susan Sarandon
Susan Sarandon原创
2025-01-09 19:31:42999浏览

Why Does MySQL's `!=` Operator Exclude Rows with NULL Values?

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 NULLIS 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 NULLIS NOT NULL 确保正确处理和测试 MySQL 查询中的 NULL 值。

以上是为什么 MySQL 的 `!=` 运算符排除具有 NULL 值的行?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn