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之流程函数的主要内容,如果未能解决你的问题,请参考以下文章

MySQL之流程函数

MySQL之流程控制结构

mysql之流程控制语句

MySQL修改数据库表字段的字符编码

MySQL修改数据库表字段的字符编码

MySQL修改数据库表字段的字符编码