MySQL之流程函数
Posted 李子捌
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL之流程函数相关的知识,希望对你有一定的参考价值。
- 备战2022春招或暑期实习,本专栏会持续输出mysql系列文章,祝大家每天进步亿点点!文末私信作者,我们一起去大厂。
- 本篇总结的是 《MySQL之流程函数》,后续会每日更新~
- 关于《Redis入门到精通》、《并发编程》、《Java全面入门》、《鸿蒙开发》等知识点可以参考我的往期博客
- 相信自己,越活越坚强,活着就该逢山开路,遇水架桥!生活,你给我压力,我还你奇迹!
目录
一、简介
流程函数在MySQL中使用的不是非常频繁,但是涉及到条件筛选等特殊场景时,使用流程函数能带来非常大的便捷,提高语句的效率。
二、流程函数
常见的流程函数有四个,如下表所示:
函数 | 功能 |
---|---|
if(value, t, f) | 如果value为true,则返回t,否则返回f |
ifnull(value1, value2) | 如果value1不为null,返回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(true, 'Ok', 'Error');
B. ifnull
select ifnull('', 'Default');
此处需要注意,''空串并不等于null,因此返回就是''
select ifnull(null, 'Default');
这种情况才是null,返回Default默认值
为了方便测试,需先创建一张测试表,表结构和数据如下所示:
create table tb_employ
(
id int not null comment '员工ID',
name varchar(10) null comment '员工姓名',
work_address varchar(20) null comment '工作地点',
entry_date date null comment '入职日期',
constraint tb_employ_pk
primary key (id)
)comment '职员表';
insert into tb_employ (id, name, work_address, entry_date)
values (1, '李子捌', '深圳', '2019-07-01'),
(2, '李子柒', '成都', '2015-06-21'),
(3, '梁某人', '北京', '2022-01-22');
C. case when [val1] then [res1] … else [default] end
需求:查询职员表中,各职员所处城市级别,北京深圳为一线城市,其余为二线城市
select name,
(case when '北京' then '一线城市' when '深圳' then '一线城市' else '二线城市' end) as '城市级别'
from tb_employ;
为了方便测试,需先创建一张测试表,表结构和数据如下所示:
-- auto-generated definition
create table tb_score
(
id int not null comment '用户ID' primary key,
name varchar(15) default '0' null comment '姓名',
chinese int default 0 null comment '语文',
math int default 0 null comment '数学',
english int default 0 null comment '英语'
) comment '成绩表';
insert into tb_score (id, name, chinese, math, english)
values (1, '李子捌', 88, 100, 79),
(2, '梁某人', 95, 94, 100),
(3, '李子柒', 92, 88, 91);
D. case [expr] when [val1] then [res1] … else [default] end
需求:成绩大于等于90分为优秀,大于等于80为良好,其余为及格
select name,
(case when chinese >= 90 then '优秀' when chinese >= 80 then '良好' else '及格' end) as '语文',
(case when math >= 90 then '优秀' when math >= 80 then '良好' else '及格' end) as '数学',
(case when english >= 90 then '优秀' when english >= 80 then '良好' else '及格' end) as '英语'
from tb_score;
以上是关于MySQL之流程函数的主要内容,如果未能解决你的问题,请参考以下文章