数据库(MySQL)—— 函数-流程函数

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

函数 功能
IF(value, t, f) 如果value为真,则返回t,否则返回f
IFNULL(value1, value2) 如果value1非空,则返回value1,否则返回value2
CASE WHEN [val1] THEN [res1] … ELSE [default] END 如果val1为真,则返回res1,… 否则返回default默认值
CASE [expr] WHEN [val1] THEN [res1] … ELSE [default] END 如果expr的值等于val1,则返回res1,… 否则返回default默认值

if

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

在这里插入图片描述ifnull

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

在这里插入图片描述这里注意,这里的空指的是null,不是指一个空字符,或者空字符串,所以第二条select会返回 ’ '。

case when then else end

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

select name ,(case workaddress when '北京' then '一线城市'
                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);

我们要分别查询他们每科的成绩,并根据他们的成绩来划分成绩等级(优秀,及格,不及格)

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;

在这里插入图片描述

上一篇:Strassen矩阵乘法——C++


下一篇:【Linux】掌握Linux系统编程中的权限与访问控制