mysql
提供了多种流程控制函数,允许用户根据条件来改变 sql语句的执行逻辑。这些函数在数据查询、更新和存储过程中都非常有用,在本文您将能学习到如下函数:
if
(expr, v1, v2)ifnull
(v1, v2)nullif
(expr1, expr2)- 简单
case
语句 - 搜索
case
语句
一、条件选择函数
这类函数通常用于简单的“如果…则…”逻辑。
1.1 if(expr, v1, v2)
这是最直接的流程控制函数,类似于三元运算符。
语法:if(condition, true, false)
功能: 如果条件表达式 condition
为真(非零、非null
),则返回 true
,否则返回false
。
示例:
其表结构如下
-- 如果分数大于等于60,返回‘及格',否则返回‘不及格' select name, score, if(score >= 60, '及格', '不及格') as result from student; -- 处理null值 select name, class,if(class is null, '没有班级', '有班级') as "班级" from student;
其结果如下:(我们要重点关注一下第二个结果,if函数检测的第一个参数是非零、非null
的为真,所以如果是空则也会将其判断为真
)
1.2 ifnull(v1, v2)
专门用于检查值是否为null
。
语法: ifnull(value1,value2)
功能: 如果value1
的值不为空(特指null
),则返回value1
,否则返回value2
。
示例:
其表结构如下
-- 如果邮箱为null,显示‘n/a' select name, class,ifnull(class,"没有班级") as "班级" from student;
其结果为
1.3 nullif(expr1, expr2)
用于比较两个表达式。如果它们相等,则返回 null,否则返回第一个表达式。
语法: nullif(expression1, expression2)
功能: 如果 expression1
等于 expression2
,则返回 null
,否则返回 expression1
。这在避免除零错误等场景中非常有用。
示例:
其表结构如下
-- 查询变动年纪 select name, class,new_class,nullif(class,new_class) as "变动年级" from student; -- 避免除零错误 select name, class,score,100/nullif(score,0) as "简单除法" from student;
其结果如下
二、case 语句
case
语句提供了比if()
函数更强大、更灵活的多分支条件判断能力。它有两种形式:简单 case
和 搜索 case
。
2.1 简单 case 语句
将某个表达式与一系列简单的值进行比较。
语法:
case expression when value1 then result1 when value2 then result2 ... [else else_result] end
功能: 将 expression
的值依次与每个 when
子句中的 value
进行比较。如果匹配,则返回对应的 result
。如果都不匹配,则返回 else
部分的结果;如果没有 else
且无匹配项,则返回 null
。
示例:
其表结构如下
select `name`, score, case score when 'a' then "优秀" when 'b' then "良好" when 'c' then "及格" when 'd' then "不及格" else "没考试" end as "成绩" from student;
其结果如下
2.2 搜索 case 语句
允许在 when
子句中使用更复杂的条件表达式,而不仅仅是等值比较。
示例:
其表结构如下
select `name`, score, case when score < 60 then "不及格" when score >= 60 and score < 70 then "及格" when score >= 70 and score < 80 then "良好" when score >= 80 then "优秀" else "没考试" end as grade_level from student;
其结果如下
到此这篇关于mysql 流程控制函数的文章就介绍到这了,更多相关mysql流程控制函数内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论