参考资料

  1. MySQL 序列使用(AUTO_INCREMENT)详细说明以及案例
  2. MySQL 数据类型详细说明以及案例
  3. MySQL 连接的使用详细说明以及案例
  4. MySQL WHERE 子句详细说明以及案例
  5. MySQL 函数详细说明以及案例
  6. MySQL ORDER BY(排序) 语句详细说明以及案例
  7. MySQL 查询数据详细说明以及案例
  8. MySQL 命令详细说明以及案例

MySQL NULL 值处理

1. NULL 值的含义

  • NULL 表示缺失或未知的值。

  • NULL 与空字符串 ''0 不同。

  • NULL 不能使用比较运算符(如 =<>)进行比较。

2. 判断 NULL 值

  • 使用 IS NULLIS NOT NULL 来判断是否为 NULL。

    SELECT * FROM table_name WHERE column_name IS NULL;
    SELECT * FROM table_name WHERE column_name IS NOT NULL;

3. 处理 NULL 值的函数

  • IFNULL(expr1, expr2):如果 expr1 为 NULL,返回 expr2,否则返回 expr1

    SELECT IFNULL(column_name, '默认值') FROM table_name;
  • COALESCE(expr1, expr2, ...):返回参数列表中第一个非 NULL 的值。

    SELECT COALESCE(column_name1, column_name2, '默认值') FROM table_name;

4. NULL 值的排序

  • 在排序时,NULL 值被视为最小值。

    SELECT * FROM table_name ORDER BY column_name ASC; -- NULL 值排在最前面
    SELECT * FROM table_name ORDER BY column_name DESC; -- NULL 值排在最后面

5. NULL 值的聚合函数

  • COUNT(column_name):忽略 NULL 值,只统计非 NULL 值。

  • SUM(column_name)AVG(column_name)MIN(column_name)MAX(column_name):忽略 NULL 值。

6. 案例

假设有一个 employees 表:

+----+----------+--------+
| id | name     | salary |
+----+----------+--------+
| 1  | Alice    | 5000   |
| 2  | Bob      | NULL   |
| 3  | Charlie  | 7000   |
| 4  | David    | NULL   |
+----+----------+--------+
  • 查询所有工资为 NULL 的员工:

    SELECT * FROM employees WHERE salary IS NULL;

    结果:

    +----+-------+--------+
    | id | name  | salary |
    +----+-------+--------+
    | 2  | Bob   | NULL   |
    | 4  | David | NULL   |
    +----+-------+--------+
  • 使用 IFNULL 处理 NULL 值:

    SELECT name, IFNULL(salary, 0) AS salary FROM employees;

    结果:

    +----------+--------+
    | name     | salary |
    +----------+--------+
    | Alice    | 5000   |
    | Bob      | 0      |
    | Charlie  | 7000   |
    | David    | 0      |
    +----------+--------+
  • 使用 COALESCE 处理 NULL 值:

    SELECT name, COALESCE(salary, 0) AS salary FROM employees;

    结果:

    +----------+--------+
    | name     | salary |
    +----------+--------+
    | Alice    | 5000   |
    | Bob      | 0      |
    | Charlie  | 7000   |
    | David    | 0      |
    +----------+--------+
  • 统计非 NULL 工资的员工数量:

    SELECT COUNT(salary) FROM employees;

    结果:

    +---------------+
    | COUNT(salary) |
    +---------------+
    | 2             |
    +---------------+
  • 计算平均工资(忽略 NULL 值):

    SELECT AVG(salary) FROM employees;

    结果:

    +-------------+
    | AVG(salary) |
    +-------------+
    | 6000.0000   |
    +-------------+