在 MySQL 开发中,条件判断和空值处理是非常常见的需求。其中,IF 和 IFNULL 是最常用的两个函数。
一、IF 函数详解
1. 基本语法
IF(condition, value_if_true, value_if_false)
含义:
如果 condition 为真,返回 value_if_true,否则返回 value_if_false。
2. 基础示例
SELECT IF(1 > 0, 'yes', 'no');
结果:
yes
3. 实战示例
示例1:判断成绩是否及格
SELECT name, score, IF(score >= 60, '及格', '不及格') AS result FROM student;
示例2:根据金额分类
SELECT amount, IF(amount > 1000, '高消费', '普通消费') AS level FROM orders;
4. IF 的嵌套使用
SELECT score, IF(score >= 90, '优秀', IF(score >= 60, '及格', '不及格')) AS level FROM student;
说明:
IF 可以嵌套实现多条件判断。
二、IFNULL 函数详解
1. 基本语法
IFNULL(expr1, expr2)
含义:
如果 expr1 不为 NULL,返回 expr1,否则返回 expr2。
2. 基础示例
SELECT IFNULL(NULL, '默认值');
结果:
默认值
3. 实战示例
示例1:处理 NULL 值
SELECT name, IFNULL(phone, '未填写') AS phone FROM user;
示例2:计算时避免 NULL
SELECT price * IFNULL(quantity, 0) AS total FROM orders;
说明:
防止 NULL 参与计算导致结果为 NULL。
三、IF vs IFNULL 核心区别
IF 用来“做判断”,IFNULL 用来“补空值”。
四、组合使用示例
在实际开发中,经常会组合使用:
SELECT name, IF(IFNULL(score, 0) >= 60, '及格', '不及格') AS result FROM student;
逻辑:
- 先用 IFNULL 处理空值再用 IF 判断
五、常见坑点总结
1. NULL 参与计算问题
SELECT 1 + NULL;
结果:
NULL
解决:
SELECT 1 + IFNULL(NULL, 0);
2. IF 不是流程控制语句
注意:
IF 是函数(表达式)不是存储过程里的 IF 语句3. 嵌套过多影响可读性
建议:
多条件优先使用 CASE WHEN。
六、扩展:CASE WHEN(推荐)
SELECT score, CASE WHEN score >= 90 THEN '优秀' WHEN score >= 60 THEN '及格' ELSE '不及格' END AS level FROM student;
优点:
可读性更强更适合复杂逻辑参考
https://dev.mysql.com/doc/refman/8.0/en/flow-control-functions.html#function_if
https://dev.mysql.com/doc/refman/8.0/en/flow-control-functions.html#function_ifnull
到此这篇关于MySQL IF 和 IFNULL 用法示例详解的文章就介绍到这了,
