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   |
    +-------------+

本篇文章内容来源于:MySQL NULL 值处理详细说明以及案例