跳到主要内容

条件判断函数

本小节介绍 MySQL 提供的 IF、IFNULL、CASE 三种条件判断函数或结构,条件判断是为了实现控制流,在不同的条件下执行不同的流程。

1. IF函数

以 student 表为例,使用 IF() 函数对查询结果的字段判断:

SELECT name,IF(age > 17,'成年','未成年') AS age_group,id_number FROM student;

查询结果如下图:

图片描述

Tips:如上图所示, IF(age > 17,'成年','未成年') 表示若 age 字段满足 age > 17 则展示为 成年,否则展示为 未成年。

2. IFNULL函数

为了演示方便,先向 teacher 表插入测试数据:

INSERT INTO teacher (name,age,id_number,email) VALUES
('Jack',30,'420117202006041111',NULL)
('Mary',31,'420117202006042222','mary@qq.com')
('Timo',35,'420117202006043333',NULL)
('Faker',38,'420117202006044444','faker@qq.com')
('Bob',35,'420117202006045555',NULL);

执行结果如下图:

图片描述

使用 IFNULL() 函数对查询结果的字段判断:

SELECT name,age,id_number,IFNULL(email,'default@qq.com') AS full_email FROM teacher;

执行结果如下图:

图片描述

Tips:如上图所示, IFNULL(email,'default@qq.com') 表示若 email 字段为 NULL ,则展示为 default @qq.com

3. CASE条件判断

以 teacher 表为例,将指定英文名对应的中文名展示出来:

SELECT 
\*,
CASE name
WHEN 'Tom' THEN '汤姆'
WHEN 'Jack' THEN '杰克'
WHEN 'Mary' THEN '玛丽'
WHEN 'Timo' THEN '提莫'
WHEN 'Bob' THEN '鲍勃'
WHEN 'Judy' THEN '朱蒂'
ELSE '未定义' END AS 'chinese\_name'
FROM teacher;

执行结果如下图:

图片描述

Tips:如上图所示, 对 name 字段进行条件判断,并将判断后的列重命名为 chinese_name,若指定的 name 字段的值满足 WHEN 则展示相应的 THEN 后面的值。

4. 小结

本小节介绍了 IF、IFNULL、CASE 三种条件判断,并且可以对指定字段进行条件判断得到满足需求的结果,需要注意的是,实际业务中这些条件判断用的很少,建议这些数据的处理交给后端程序语言去处理,可以更好的维护和管理业务逻辑代码。