哈罗,各位小伙伴大家好,又见面了,我还是那个不吃饱不干活的小尘,欢迎来到本期的SQL语言之流程控制函数部分,让我们一起进入知识的海洋吧~
流程控制函数用于实现一些流程控制。
(1)if函数用来实现if else 的效果。
认识:
如图,我们可以知道IF函数有三个参数,第一个是条件表达式,最终结果是true或false。
如果条件成立(返回true),将返回表达式2的值;若条件不成立,则返回表达式2的值。
相当于三元运算符,也能表现出if else的效果。
我们来做几个简单的案例感受一下吧:
<1> 如果10>5,那么就输出“大”;否则输出“小”。
<2> 查询员工表里面的员工是否有奖金,如果有的话,就输出“有”;否则就输出“没有”。
代码:
select last_name, commission_pct, if(commission_pct is null,'没奖金','有奖金') from employees;
结果展示:
(2)case函数 1、使用一
相当于switch case的效果。
在java中:(比较适合处理等值判断-->变量表达式的值与case后面的常量比较)
switch (变量表达式){
case 常量1:语句1 ;break;
......
default :语句n;break;
}
在MYSQL中:
case 要判断的变量(字段)或表达式
when 常量1 then 要显示的值1(或语句1);
when 常量2 then 要显示的值2(或语句2);
.......
else 要显示的值n或语句n;
end
注意:
1、直接写的是case,而且没有大括号。
2、when后面直接加的是常量值,没有冒号,用的是then。
3、then后面加的是要显示的值,不需要加分号。then后面若加的是语句,就需要加分号。
4、when语句可以有多个。
5、默认情况不用default,用的是else。
6、最后结尾用的是end。
案例:
查询员工的工资,要求:
若部门号=30,那么显示的工资为元工资的1.1倍。
若部门号=40,显示的工资为原工资的1.2倍。
若部门号=50,显示的工资为原工资的3倍。
其他的部门显示的工资为原工资。
分析:这个案例明显要搭配着查询来用。也就是以上这些要放在select后面,就相当于作为表达式来用了。那么then后面就不能放语句了,只能放要显示的值了。
以后我们会用存储过程或者函数。在存储过程里面,就可以单独的把case当成语句来用了。也就是不搭配select,就可以直接用。
case既可以搭配着select来充当表达式,也可以自己单方的形成语句。
本题是当做表达式,即then后面写的是要显示的值。
代码:
SELECT salary, department_id, CASE department_id WHEN 30 THEN salary*1.1 WHEN 40 THEN salary*1.2 WHEN 50 THEN salary*1.3 ELSE salary END AS 新工资 FROM employees;
结果展示及相关语句解释:
2、使用二
类似于多重if。
在java中:(判断区间,大于小于的判断)
if(条件1){
语句1;
}else if(条件2){
语句2;
}
......
else{
语句n;
}
在MYSQL中:
case
when 条件1 then 要显示的值1或语句1;
when 条件2 then 要显示的值2或语句2;
......
else 要显示的值n或语句n
end
注意:
1、case后面没有加“条件”。
2、case后面是条件,结果是true或者false。若满足条件,则执行then,即要显示的值。
当然,如果是值,就不用加分号;如果case被单独当做语句,then后面是语句的话,就需要加分号。
3、
案例:
查询员工的工资情况:
如果工资>20000,那么显示A级别。
如果工资>15000,那么显示B级别。
如果工资>10000,那么显示C级别。
否则,显示D级别。
分析:
这次我们的判断条件不是等于一个值,而是区间判断。
那么就可以用这种情况下的case啦。
代码:
SELECt salary, CASE WHEN salary>20000 THEN 'A' WHEN salary>15000 THEN 'B' WHEN salary>10000 THEN 'C' ELSE 'D' END AS 工资级别 FROM employees;
结果展示:
好啦,这次的分享就到这儿了。
可能会有点绕,所以要多加练习哦!
原创不易,请多多支持!
我是小尘,
咱们下次再见啦~



