22.流程控制函数
以下是 MySQL 中常用的条件控制函数,用于根据不同条件返回对应结果,实现逻辑判断与分支处理,总结如下:
1. IF 函数
IF(expr1, expr2, expr3)
- 逻辑:先判断
expr1
是否为真(非 0、非NULL
等布尔真情况 )。
-
- 若
expr1
为TRUE
,返回expr2
; - 若
expr1
为FALSE
,返回expr3
。
- 若
- 场景:简单二分支判断,比如根据成绩是否及格返回“合格”或“不合格”。
2. IFNULL 函数
IFNULL(expr1, expr2)
- 逻辑:专门处理
NULL
值判断。
-
- 若
expr1
不为NULL
,直接返回expr1
; - 若
expr1
是NULL
,返回expr2
。
- 若
- 场景:数据补全,比如查询用户手机号,若为
NULL
则返回“未填写” 。
3. CASE WHEN 语句(多重分支)
SELECT CASE WHEN expr1 THEN expr2 WHEN expr3 THEN expr4 ELSE expr5
END;
- 逻辑:依次判断条件分支。
-
- 先检查
expr1
,为TRUE
则返回expr2
; - 若
expr1
不满足,检查expr3
,为TRUE
则返回expr4
; - 所有
WHEN
条件都不满足时,返回expr5
(ELSE
可省略,省略则返回NULL
)。
- 先检查
- 场景:复杂多分支,比如根据分数区间返回“优秀”“良好”“合格”“不合格”等评级 。
这些函数让 SQL 查询能灵活处理条件逻辑,减少依赖应用层判断,直接在数据库层实现数据结果的动态处理 。
4.示例
以前创建过的一张学生表,利用流程控制函数来查询学生的成绩,来提升显示的效果。
(1)if函数的使用
SELECT `num`, `name`, IF(`chinese` + `math` + `english` >= 250, '优秀', '捞') AS `学习情况`
FROM `students`;
(2)case when语句的使用
SELECT `num`, `name`, CASE WHEN (`chinese` + `math` + `english`) >= 270 THEN '优秀'WHEN (`chinese` + `math` + `english`) >= 200 THEN '合格'ELSE '捞' END AS `学习情况`
FROM `students`;
(3)if 和 ifnull的对比
SELECT `num`, `name`, IF(`chinese`is NULL or `math` is NULL or `english`is NULL , '成绩不全', '成绩录入完成') AS `成绩录入情况`
FROM `students`;
SELECT `num`, `name`, IFNULL(`chinese` + `math` + `english` , '成绩不全') AS `成绩录入情况`
FROM `students`;