MySQL NULL 值处理

MySQL 使用 SELECT 命令及 WHERE 子句来读取数据表中的数据,但是当提供的查询条件字段为 NULL 时,该命令可能就无法正常工作

为了处理这种情况,MySQL提供了三大运算符:

  • IS NULL: 当列的值是 NULL,此运算符返回 true
  • IS NOT NULL: 当列的值不为 NULL, 运算符返回 true
  • <=>: 比较操作符(不同于 = 运算符),当比较的两个值相等或者都为 NULL 时返回 true

注意事项:

  • 关于 NULL 的条件比较运算是比较特殊的。你不能使用 = NULL 或 != NULL 在列中查找 NULL 值
  • 在 MySQL 中,NULL 值与任何其它值的比较(即使是 NULL)永远返回 NULL,即 NULL = NULL 返回 NULL
  • MySQL 中处理 NULL 使用 IS NULL 和 IS NOT NULL 运算符
  1. 检查是否为 NULL:

要检查某列是否为 NULL,可以使用 IS NULL 或 IS NOT NULL 条件。

SELECT * FROM username WHERE id IS NULL;
SELECT * FROM username WHERE id IS NOT NULL;
  1. 使用 COALESCE 函数处理 NULL:

COALESCE 函数可以用于替换为 NULL 的值,它接受多个参数,返回参数列表中的第一个非 NULL 值:

SELECT id, COALESCE(id, 0) AS ID
FROM username;

以上 SQL 语句中,如果 id 列为 NULL,则 COALESCE 将返回 0

  1. 使用 IFNULL 函数处理 NULL:

IFNULL 函数是 COALESCE 的 MySQL 特定版本,它接受两个参数,如果第一个参数为 NULL,则返回第二个参数

SELECT id, IFNULL(id, 0) AS ID
FROM username;
  1. NULL 排序:

在使用 ORDER BY 子句进行排序时,NULL 值默认会被放在排序的最后。如果希望将 NULL 值放在最前面,可以使用 ORDER BY column_name ASC NULLS FIRST,反之使用 ORDER BY column_name DESC NULLS LAST

SELECT username, id
FROM username
ORDER BY id ASC NULLS FIRST;
  1. 使用 <=> 操作符进行 NULL 比较:

<=> 操作符是 MySQL 中用于比较两个表达式是否相等的特殊操作符,对于 NULL 值的比较也会返回 TRUE。它可以用于处理 NULL 值的等值比较

SELECT * FROM username WHERE username <=> NULL;
  1. 注意聚合函数对 NULL 的处理:

在使用聚合函数(如 COUNT, SUM, AVG)时,它们会忽略 NULL 值,因此可能会得到不同于预期的结果。如果希望将 NULL 视为 0,可以使用 COALESCE 或 IFNULL

SELECT AVG(COALESCE(id, 0)) AS ID FROM username;

这样即使 id 为 NULL,聚合函数也会将其视为 0

results matching ""

    No results matching ""