0


第19讲:MySQL常用的几种流程控制函数以及基本使用

文章目录

1.常用的几种流程控制函数

流程控制函数可以在SQL语句中实现条件筛选,从而提高语句的执行效率。

流程控制函数和其他函数一样,都是针对字段进行处理的。

如果想要进行快速统计,例如成绩为80分以上都归类为优秀,程序为60分以下都归类为不及格,这种类似的场景下,由于数据库都记录的是分数,那么就可以通过流程函数,快速实现。

任何的流程函数都可以将条件匹配的结果充当成一个新的字段进行展示。
函数和使用格式功能IF(value,t,f)判断value是否为true,如果为true则返回t,否则返回fIFNULL(value1,value2)判断values1是否为空,如果为空(null),那么就返回value2,如果不为空那么就返回value1CASE WHEN [条件] THEN [值1] … ELSE [值2] END判断WHEN后面的条件是否为TRUE,如果为TRUE则返回值1,其余的就返回值2CASE 条件 WHEN 值 THEN [值1] … ELSE [值2] END判断条件是否等于WHEN后面的值,如果等于则返回值1,其余的就返回值2

2.IF流程函数的使用

IF函数的使用格式:

IF(条件,条件为true返回的值,条件为flase返回的值)

IF流程控制函数主要用来判断条件是否为true,如果为true则返回值1,否则将返回值2。

直接将value部分填写true,查看是否会显示t,然后在将values部分改成flase,查看是否会显示f

#条件为true
mysql>selectif(true,'t','f');+------------------+|if(true,'t','f')|+------------------+| t                |+------------------+#条件为flase
mysql>selectif(false,'t','f');+-------------------+|if(false,'t','f')|+-------------------+| f                 |+-------------------+

查询jszx_xgymjzxxb表,将年龄大于30岁的人员,标记年龄达标,不满足30岁的人员,标记年龄不达标。

思路:首先打印出想要的几个字段,由于需求是看年龄划分达标与不达标,那么打印出姓名和年龄两列即可,最终是根据年龄的大小去划分类别的,因此可以使用IF流程函数,判断的条件就是年龄大于30岁则返回达标,如果年龄小于30岁则返回不达标,最后给流程控制显示的字段起一个别名即可。

select 
    name as 姓名,
    nl as 年龄,(if(nl >='30','达标','不达标'))as 年龄是否达标
from jszx_xgymjzxxb;

在IF流程函数前后套括号只是为了美化语句,不是固定的语法格式。

查询结果如下,大于30岁的人员都被标记了达标,低于30岁的人员则被标记不达标。

image-20220515103005678

3.IFNULL流程函数的使用

IFNULL函数的使用格式:

IFNULL(指定条件,不为NULL返回的值)

IFNULL函数主要是判断条件是否为NULL的,如果为NULL则打印为NULL的结果,如果不为NULL则返回条件的结果。

#条件不为NULL,则返回条件的结果select ifnull('OK','HELLO');+----------------------+| ifnull('OK','HELLO')|+----------------------+| OK                   |+----------------------+#条件为NULL,则返回其他值
mysql>select ifnull(NULL,'HELLO');+----------------------+| ifnull(NULL,'HELLO')|+----------------------+| HELLO                |+----------------------+#注意:条件必须为数据库中的NULL,如果是空格或者是null都不算为NULL。

4.CASE 条件 WHEN流程函数的使用

CASE流程函数有两种格式,一种是CASE 条件 WHEN,一种是CASE WHEN 条件,这两种方式应用场景不同。

CASE 条件 WHEN

适合只有一种条件匹配、多值判断的场景,也就是说只根据一个条件就能判断出结果并赋予新值,一条CASE 条件 WHEN只可以声明一种条件,WHEN后面跟的就是条件的值,值可以有很多种,不同的值通过WHEN来声明判断,then后面是流程控制赋予的新字段值。

CASE 条件 WHEN 使用格式:

CASE 条件 WHEN 值1 THEN 新字段的值1 WHEN 值2 then 新字段的值2 ELSE 新字段的值3 END

CASE 条件 WHEN 中的条件一般都是一个字段,根据字段的值去进行判断。

查询jszx_xgymjzxxb表中人员的工作所在地,如果工作地为北京则归类为首都,如果工作地为上海则归类为魔都,其他的地区归类为一线城市。

思路:首先考虑需要的字段,由于是按照人员所在地进行分类,那么就只需要打印姓名和所在地两个字段即可,我们是根据所在地进行归类的,因此流程函数就需要根据所在地进行条件的判断,判断如果所在地为北京的则归类为首都,所在地为上海的则归类为魔都,其余的所在地都归类为一线城市。

select 
    name as 姓名,
    szd as 所在地,(case szd when'北京'then'首都'when'上海'then'魔都'else'一线城市'end)as'城市类型'from jszx_xgymjzxxb 
orderby 城市类型 desc;

查询结果如下,上海的都归类为魔都,北京的都归类为首都,其他城市归类为一线城市。

image-20220515102937489

5.CASE WHEN 条件 流程函数的使用

CASE WHEN 条件

适合多条件匹配、单值判断的场景,一条CASE语句中,可以声明多个WHEN,每个WHEN都是一种条件,then后面是流程控制赋予的新字段值。

CASE WHEN 条件 使用格式:

CASE WHEN 条件1 THEN 新字段值1 WHEN 条件2 THEN 新字段值2 WHEN 条件3 THEN 新字段值3 ELSE 新字段值4 END 

CASE WHEN 条件 语句中的条件一般都是一个具体的条件,比如nl大于30等等。

首先来创建一张学生成绩表并插入几条语句。

建表语句如下:

CREATETABLE xscjb (
   xh INTCOMMENT'学号',
   xm VARCHAR(20)COMMENT'姓名',
   ywcj INTCOMMENT'语文成绩',
   sxcj INTCOMMENT'数学成绩',
   yycj INTCOMMENT'英语成绩')COMMENT'学生成绩表';

插入几条数据:

insertinto xscjb (xh, xm, ywcj, sxcj, yycj)VALUES(1,'小明',45,75,93),(2,'小红',47,56,25),(3,'小兰',82,91,89);

image-20220515102655549

查询各个学生的成绩,不用显示每个学生的具体分数,只显示对应科目的成绩是达标类型即可。

成绩大于90视为优秀,成绩大于80小于90视为良好,成绩大于60小于80视为及格,成绩小于60视为不及格。

思路:首先考虑取那些字段,所有字段都可以取出来,因为没有几个,学号可取可不取,这里取吧,由于是判断各科成绩达标类型的需求,那么流程函数一定是在ywcj、sxcj、yycj三个字段进行条件过滤,以语文成绩为例,首先判断ywcj大于等于90分的数据,标记为优秀,然后判断ywcj大于等于80并且小于90的数据,标记为良好,然后判断ywcj大于等于60并小于80的数据,标记为及格,其余的都是60分以下,标记为不及格。

最后给每个流程函数标记一个别名。

select
    xh as 学号,
    xm as 姓名,(casewhen ywcj >='90'then'优秀'when ywcj >='80'and ywcj <'90'then'良好'when ywcj >='60'and ywcj <'80'then'及格'else'不及格'end)as 语文成绩,(casewhen sxcj >='90'then'优秀'when sxcj >='80'and sxcj <'90'then'良好'when sxcj >='60'and sxcj <'80'then'及格'else'不及格'end)as 数学成绩,(casewhen yycj >='90'then'优秀'when yycj >='80'and yycj <'90'then'良好'when yycj >='60'and yycj <'80'then'及格'else'不及格'end)as 英语成绩
from xscjb;

查询结果如下,分数已经被替换成了及格或者优秀等等,此时我们就可以在程序中画一个图形,展示各类的人员成绩。

image-20220515103914481

标签: mysql 数据库 sql

本文转载自: https://blog.csdn.net/weixin_44953658/article/details/126986542
版权归原作者 Jiangxl~ 所有, 如有侵权,请联系我们删除。

“第19讲:MySQL常用的几种流程控制函数以及基本使用”的评论:

还没有评论