目录

  1. NULL 值的概念
  2. 查询中的 NULL 值
  3. 使用 IS NULLIS NOT NULL
  4. NULL 值与聚合函数
  5. 使用 COALESCE() 处理 NULL 值
  6. 使用 IFNULL() 处理 NULL 值
  7. NULL 值与排序
  8. 插入 NULL 值
  9. NULL 值与比较运算符
  10. 参考资料

NULL 值的概念

在 MySQL 中,NULL 表示一个空值或未知值,它不同于零(0)或空字符串(””)。NULL 通常用于表示缺失、未知或不适用的值。处理 NULL 值时,需要特别注意,因为 NULL 与任何其他值(包括 NULL 本身)进行比较时,总是返回 FALSE


查询中的 NULL 值

在查询中,NULL 值表示该列没有值。可以使用 IS NULLIS NOT NULL 来检查列中的 NULL 值。

示例:查询 ageNULL 的记录

SELECT * FROM users WHERE age IS NULL;

此查询返回 ageNULL 的所有记录。

示例:查询 age 不为 NULL 的记录

SELECT * FROM users WHERE age IS NOT NULL;

此查询返回 age 不为 NULL 的所有记录。


使用 IS NULLIS NOT NULL

在 MySQL 中,不能使用标准的比较运算符(如 =!=)来判断 NULL 值。相反,使用 IS NULLIS NOT NULL 来检查是否为 NULL

示例:检查某列是否为 NULL

SELECT * FROM orders WHERE shipping_date IS NULL;

此查询返回所有 shipping_dateNULL 的记录。

示例:检查某列是否不为 NULL

SELECT * FROM orders WHERE shipping_date IS NOT NULL;

此查询返回所有 shipping_date 不为 NULL 的记录。


NULL 值与聚合函数

聚合函数在处理 NULL 值时有特定的规则:

  • COUNT() 函数不会计算 NULL 值。
  • SUM(), AVG(), MIN(), MAX() 等函数会忽略 NULL 值。
  • GROUP_CONCAT() 等字符串聚合函数会跳过 NULL 值。

示例:计算 sales 列的总和(忽略 NULL 值)

SELECT SUM(sales) FROM orders;

此查询返回 sales 列的总和,自动忽略 NULL 值。


使用 COALESCE() 处理 NULL 值

COALESCE() 函数返回它的第一个非 NULL 值。如果所有的值都是 NULL,则返回 NULL

示例:如果 discountNULL,则返回 0

SELECT product_name, COALESCE(discount, 0) AS discount FROM products;

此查询返回 discount 列的值,如果 discountNULL,则返回 0。


使用 IFNULL() 处理 NULL 值

IFNULL() 函数用于检查表达式是否为 NULL,如果是 NULL,则返回指定的替代值。如果不是 NULL,则返回原值。

示例:如果 ageNULL,则显示 0

SELECT name, IFNULL(age, 0) AS age FROM users;

此查询返回 age 列的值,如果 ageNULL,则返回 0。


NULL 值与排序

ORDER BY 排序时,NULL 值的排序方式取决于排序方向:

  • 默认情况下,升序排列时,NULL 值排在最前面;降序排列时,NULL 值排在最后。
  • 可以使用 IS NULLIS NOT NULL 来手动控制 NULL 值的排序顺序。

示例:按 age 排序,将 NULL 值放在最后

SELECT name, age
FROM users
ORDER BY age ASC NULLS LAST;

这个查询会将 NULL 值排在所有数字之后(如果数据库支持 NULLS LAST)。


插入 NULL 值

在插入数据时,可以显式地将 NULL 值插入数据库。例如,在插入数据时,某些列可能没有值,这时可以使用 NULL

示例:插入包含 NULL 的数据

INSERT INTO users (name, age) VALUES ('John Doe', NULL);

这条插入语句将 John Doeage 列设置为 NULL

注意:如果列定义为 NOT NULL,则不能插入 NULL 值。


NULL 值与比较运算符

NULL 值与其他值进行比较时总是返回 FALSE。因此,不能使用常规的比较运算符(如 =!=)来判断 NULL

示例:错误的比较方式

SELECT * FROM users WHERE age = NULL;  -- 错误

上面的查询会返回空结果,因为 NULL 与任何值比较时会返回 FALSE

正确的方式是使用 IS NULL

SELECT * FROM users WHERE age IS NULL;  -- 正确


参考资料


如果你有更多关于 NULL 值处理的疑问,或需要具体的优化建议,随时告诉我!