直接解释 IS NULL
和 IS NOT NULL
是用于检查列的值是否缺失 (NULL
) 或存在 (非 NULL
) 的 SQL 运算符。数据库中的 NULL
表示值的缺失——它不等同于空字符串、零或任何默认值。IS NULL
用于过滤指定列没有值的行,而 IS NOT NULL
用于过滤包含任何非 NULL
值的行。例如,在存储用户数据且包含可选 phone_number
列的表中,WHERE phone_number IS NULL
将返回未提供电话号码的用户,而 WHERE phone_number IS NOT NULL
将返回提供了电话号码的用户。
用例和示例 这些运算符对于数据验证、清理和条件逻辑至关重要。假设您有一个包含 shipped_date
列的 orders
表。使用 WHERE shipped_date IS NULL
可以帮助识别需要处理的未发货订单。反之,WHERE shipped_date IS NOT NULL
可用于计算平均发货时间。另一个示例涉及连接:如果 orders
表中的 customer_id
可以为空,IS NULL
可以识别孤立订单(例如,访客结账),而 IS NOT NULL
确保只包含链接到有效客户的订单。
常见陷阱和最佳实践 一个常见错误是使用 = NULL
或 != NULL
而不是 IS NULL
/IS NOT NULL
。在 SQL 中,像 = NULL
这样的相等性检查总是返回 NULL
(实际上是假),因此必须使用这些运算符来进行准确过滤。此外,NULL
值在聚合函数(如 SUM()
或 AVG()
)中会被排除,因此将 IS NOT NULL
与这些函数结合使用是多余的。例如,SELECT AVG(price) FROM products WHERE price IS NOT NULL
等同于 SELECT AVG(price) FROM products
,因为 AVG()
本身会跳过 NULL
值。始终明确使用 IS NULL
/IS NOT NULL
,以避免查询中的逻辑错误。