--查询所有员工的入职天数,并根据入职天数倒序排序
select name,datediff(curdate(),entrydate) as 'entrydays' from emp order by entrydays desc;
四.流程函数
在SQL语句中实现条件筛选,从而提高语句的效率.
1.常用流程函数
函数
功能
IF(value,t,f)
如果value为true,则返回t,否则返回f
IFNULL(value1,value2)
如果value1不为空,返回value1,否则返回value2
CASE WHEN [val1] THEN [res1] …ELSE [default] END
如果val1位true,返回res1,…否则返回default默认值
CASE [expr] WHEN [val] THEN [res1] … ELSE [default] END
如果expr的值等于val1,返回res1,…否则返回default默认值
2.实例
--if
select if(true,'ok','Error');
--ifnull
select ifnull(null,'Default');
--case when then esle end
--需求:查询emp表的员工姓名和工作地址,北京/上海为一线城市,其他为二线城市
select name,
(case workaddress when '北京' then '一线城市' when '上海' then '一线城市' else '二线城市' end) as '工作地址'
from emp;
3.案例
--案例:统计班级各许愿的乘积,展示如下:
-->=85,展示优秀
-->=60,展示及格
--否则,展示不及格
--数据准备
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
id,
name,
(case when math >= 85 then '优秀' when math >=60 then '及格' else '不及格' end )'数学成绩',
(case when english >= 85 then '优秀' when math >=60 then '及格' else '不及格' end )'英语成绩',
(case when chinese >= 85 then '优秀' when math >=60 then '及格' else '不及格' end )'语文成绩'
from score;