一、引言
接下来,我们就进入函数的最后一个部分:流程函数。而流程控制函数在我们的日常开发过程是很有用的。
流程控制函数在我们 sql 语句当中,经常用来实现条件的筛选,从而提高语句的一个执行效率。
我们主要介绍以下4个流程控制函数。
注意:
1、第三个和第四个基本上是一致的,都是 case 函数。
2、IF(value,t,f):意思是如果 value 的值为 true ,则返回 t ,否则返回 f 。
3、IFNULL(value1,value2):先判断第一个参数 value1 是否为空,如果不为空,返回 value1 ,而如果为空,返回 value2 。
4、CASE WHEN [ val1 ] THEN [res1] ... ELSE [ default ] END :
case when :当什么时候。
当 val1 值为 true 的时候,则返回 res1 ,否则返回默认值 default ,语法块结束后面加一个 end 。
5、CASE [ expr ] WHEN [ val1 ] THEN [ res1 ] ... ELSE [ default ] END:
下面这个也是类似:如果表达式 expr 的值为 val1 ,则返回 res1 ,否则返回默认值,语法块结束用 end 。
二、操作
接下来回到工具 DataGrip 去一一操作刚刚学习的函数。
1、IF(value,t,f);
如果 value的值为 true 则返回第二个字段的值 t,否则返回 f。
正常来说这个 value 应该是一个条件表达式。
SELECT IF(true,'OK','NO'); SELECT IF(false,'OK','NO');
2、IFNULL(value1,value2);
SELECT IFNULL('value','default');
如果给的字符串是空的字符串,它返回的也是空串,而不是返回默认值。
SELECT IFNULL('','default');
如果为null,就会返回设定的默认值。
SELECT IFNULL(null,'default');
3、CASE WHEN THEN ... ELSE END(case 函数)
emp表 初始数据:
(1)需求:查询emp表的员工姓名和工作地址(如果北京/上海---->一线城市,其他---->二线城市)
SELECT name,(CASE workaddress WHEN '北京'THEN '一线城市' WHEN '上海' THEN '一线城市' ELSE '二线城市' END ) AS '工作地址' FROM emp;
三、案例
根据需求完成一下SQL语句的编写。
(1)统计班级各个学生的成绩。展示的规则如下:
1、>=85,展示优秀。
2、>= 60,展示及格。否则,展示不及格。
完成这个案例,对控制函数的操作进行学习与巩固。
(1)首先先创建一个成绩表。
CREATE TABLE score ( id INT COMMENT 'ID', name VARCHAR(20) COMMENT '姓名', math INT COMMENT '数学', english INT COMMENT '英语', chinese INT COMMENT '语文' ) COMMENT '学生成绩表'; INSERT INTO score(ID, NAME, MATH, ENGLISH, CHINESE) VALUES (1,'Tom',67,88,95),(2,'Rose',23,66,90),(3,'Jack',56,98,76); SELECT * FROM score;
(2)接着完成题目的需求。
最终我们的表中的数据全部查询出来之后,要把分数变成对应的 '优秀'、'及格'或者是'不及格' 去展示出来。
SELECT id, name, (CASE WHEN math>=85 THEN '优秀' WHEN math>=60 THEN '及格' ELSE '不及格' END ) AS '数学', (CASE WHEN english>=85 THEN '优秀' WHEN english>=60 THEN '及格' ELSE '不及格' END ) AS '英语', (CASE WHEN chinese>=85 THEN '优秀' WHEN chinese>=60 THEN '及格' ELSE '不及格' END ) AS '语文' FROM score;
这就是这篇博客关于流程控制函数的全部内容。