在 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 |
|---|---|---|
| 功能 | 条件判断 | 空值处理 |
| 参数个数 | 3 个 | 2 个 |
| 判断方式 | 任意条件 | 是否为 null |
| 使用场景 | 分支逻辑 | 默认值处理 |
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 用法示例详解的文章就介绍到这了,更多相关mysql if和ifnull用法内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论