一、case when语句
case when 条件 then 结果
when 条件 then 结果
when 条件 then 结果
.........
else 结果
end
例:teacher表记录了教师ID和教师姓名,我们要返回每个老师的教授科目
如果t_name=张三,则返回语文老师,t_name=李四返回语文老师,t_name=王五返回英语老师,其他返回空值(注意语句后边没有逗号)
select t_name,
case when t_name='张三' then '语文老师'
when t_name='李四' then '数学老师'
when t_name='王五' then '英语老师'
else null
end
from teacher;
out:
end放哪都行,最后就行,else可以不写
如:
select t_name,
case when t_name='张三' then '语文老师'
when t_name='李四' then '数学老师'
when t_name='王五' then '英语老师'
end
from teacher;
如:
select t_name,
case when t_name='张三' then '语文老师' when t_name='李四' then '数学老师' when t_name='王五' then '英语老师' end
from teacher;
另外,还可以写成
select t_name,
case t_name when '张三' then '语文老师'
when '李四' then '数学老师'
when '王五' then '英语老师'
end
from teacher;
二、if函数
if(条件,如果成立返回a,不成立返回b)
例:有一张表记录了学生ID,课程ID,和成绩
查询每个学生及格的科目数量
select s_id,count(score) as c from score group by s_id;
这样得出的是每个学生的科目数量,我们要的是及格的,所以我们在count函数里边加上if函数,如果分数>60,则返回分数,否则返回空值(相当于我们得到虚拟的一列,这一列只记录了大于60的分数成绩,小于60的都记为空值,所以count不会计算到)
select s_id,count(if(score>60,score,null)) as c from score group by s_id;
out:
2.如果name为空值,返回pass,如果不是则返回name本身
if(name is null,'pass',name)
三、ifnull函数
ifnull(如果不是null则返回a,是null就返回b)
例:学生成绩表中有一个成绩为空值,我们要查找学生成绩,如果是空值就返回0
select score from score;
out:
返回所有成绩包括null,我们要让null返回为0,使用ifnull函数
select
ifnull(score,0)
from score;
out: