1、CASE WHEN
- 语法(简单函数)
case 字段 when 预期值 then 结果1 else 结果2 end
case when 语句能在SQL语句中放入判断逻辑,类似Java、python中学习的 if else 语句。
case when 语句分为简单函数和条件表达式。
-
举例
查询students中的name,和gender,如果是M改为男,F改为女
name | gender |
小明 | 男 |
小红 | 女 |
小军 | 男 |
小米 | 女 |
小白 | 女 |
小兵 | 男 |
小林 | 男 |
小新 | 女 |
小王 | 男 |
小丽 | 女 |
- 语法(条件表达式)
case when 条件判断 than result1 else result2 end
当条件判断为真是返回result1,否则返回result2,如果没有else则返回null。case 和 end之间可以有多个when ....... then ......else 语句,end表示case语句结束。
- 举例
查询students中的name,然后根据score划分等级grade
60以下不及格,60到90良好,90以上优秀
select name, (case
when score < 60 then '不及格'
when score >=61 and score <= 90 then '良好'
when score >= 91 then '优秀'
end )
as grade from students;
name | grade |
小明 | 良好 |
小红 | 优秀 |
小军 | 良好 |
小米 | 良好 |
小白 | 良好 |
小兵 | 不及格 |
小林 | 良好 |
小新 | 优秀 |
小王 | 良好 |
小丽 | 良好 |
2、IF
- 语法
if (表达式,result_true,result_false)
当表达式结果对时,返回result_true,否则返回result_false。
- 举例
查询students中的name,和gender,如果是M改为男,F改为女
select name, if (gender='M', '男', '女') as gender from students;
name | gender |
小明 | 男 |
小红 | 女 |
小军 | 男 |
小米 | 女 |
小白 | 女 |
小兵 | 男 |
小林 | 男 |
小新 | 女 |
小王 | 男 |
小丽 | 女 |
再比如:看一个班男生女生有多少人
select sum(if(gender='M',1,0)) as male,
sum(if(gender='F',1,0)) as female
from students;
male | female |
5 | 5 |
3、IFNULL
在程序中调用sql语句时,如果返回结果是null,是非常容易引发一些意外情况,因此希望在sql中做一些处理,如果查询结果是null ,就转为特定的值,就要用到Mysql中 ifnull 函数。
sql一般写法是:
select salary from student where name='张三';
使用ifnull 进行改写:
select ifnull(salary,0) salary from student where name='张三';
但使用ifnull 语句,如果where 条件中name 值是不存在的,那么仍将返回null 。
返回结果:null
select ifnull(salary,0) salary from student where name='张三';
返回结果:0
select ifnull((select salary from student where name='张三'),0) salary;
在实际应用中,如果确定where 条件的值一定存在,使用者可以使用前者,否则要用后者。ifnull 函数还可以结合聚合函数使用。avg、count等用同样方式处理,而且,无论where条件存不存在,结果都会返回0。