MySQL NULL 值处理详细说明以及案例
2025-03-06
7
MySQL NULL 值处理
1. NULL 值的含义
NULL 表示缺失或未知的值。
NULL 与空字符串
''
或0
不同。NULL 不能使用比较运算符(如
=
、<
、>
)进行比较。
2. 判断 NULL 值
使用
IS NULL
或IS 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 值处理详细说明以及案例
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。