流程函数

流程函数也是很常用的一类函数,可以在SQL语句中实现条件筛选,从而提高语句的效率。

函数 功能
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 [ val1 ] THEN
[res1] ... ELSE [ default ] END
如果expr的值等于val1,返回
res1,... 否则返回default默认值

演示如下:

A.if

select if(false, 'Ok', 'Error');

B.ifnull

select ifnull('Ok','Default');

select ifnull('','Default');

select ifnull(null,'Default');

C.case when then else end

需求: 查询emp表的员工姓名和工作地址 (北京/上海 ----> 一线城市 , 其他 ----> 二线城市)

select
    name,
    ( case workaddress when '北京' then '一线城市' when '上海' then '一线城市' else'二线城市' end ) as '工作地址'
from emp;

案例:

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);

具体的SQL语句如下:

select
    id,
    name,
    (case when math >= 85 then '优秀' when math >=60 then '及格' else '不及格' end )'数学',
    (case when english >= 85 then '优秀' when english >=60 then '及格' else '不及格'end ) '英语',
    (case when chinese >= 85 then '优秀' when chinese >=60 then '及格' else '不及格'end ) '语文'
from score;

分析一下,在前面讲到的两个函数的案例场景,思考一下需要用到什么样的函数来实现?

1). 数据库中,存储的是入职日期,如 2000-01-01,如何快速计算出入职天数呢? -------->
答案: datediff
2). 数据库中,存储的是学生的分数值,如98、75,如何快速判定分数的等级呢? ---------->
答案: case ... when ...

 

posted @ 2025-12-05 15:40  向闲而过  阅读(1)  评论(0)    收藏  举报