在 SQL 中,我们常常需要根据不同条件返回不同的结果。比如:

用户是否激活,显示“已激活”或“未激活”;

成绩是否大于 60,显示“及格”或“不及格”;

按等级显示不同的会员类型。

这些都可以通过 条件函数 来实现。常见的就是 IF 和 CASE WHEN。今天我们就快速梳理一下它们的用法。

一、IF 函数

IF 是最简单的条件函数,只有两种结果:条件成立返回一个值,不成立返回另一个值。

语法:

IF(condition, value_if_true, value_if_false)

示例 1:判断用户是否成年

SELECT name, age, IF(age >= 18, '成年', '未成年') AS status

FROM users;

运行结果会根据 age 字段返回 “成年” 或 “未成年”。

示例 2:判断是否有邮箱

SELECT name, IF(email IS NULL, '无邮箱', '有邮箱') AS email_status

FROM users;

二、CASE WHEN 表达式

当条件不止两种情况时,CASE WHEN 比 IF 更灵活。

语法:

CASE

WHEN condition1 THEN result1

WHEN condition2 THEN result2

...

ELSE default_result

END

示例 1:成绩分级

SELECT name, score,

CASE

WHEN score >= 90 THEN '优秀'

WHEN score >= 60 THEN '及格'

ELSE '不及格'

END AS level

FROM students;

这里根据 score 返回不同等级。

示例 2:会员等级

SELECT name, points,

CASE

WHEN points >= 1000 THEN 'VIP'

WHEN points >= 500 THEN '高级会员'

ELSE '普通会员'

END AS member_type

FROM users;

三、CASE 的另一种写法(等值判断)

除了判断条件,CASE 还能写成类似 switch 的形式。

语法:

CASE expression

WHEN value1 THEN result1

WHEN value2 THEN result2

...

ELSE default_result

END

示例:按星期显示中文

SELECT day,

CASE day

WHEN 1 THEN '周一'

WHEN 2 THEN '周二'

WHEN 3 THEN '周三'

WHEN 4 THEN '周四'

WHEN 5 THEN '周五'

WHEN 6 THEN '周六'

WHEN 7 THEN '周日'

ELSE '未知'

END AS weekday

FROM calendar;

四、IF vs CASE WHEN 区别

1. 适用场景不同

IF 适合 简单二选一 的场景。

CASE WHEN 适合 多条件分支。

2. 可读性

IF 简洁,但嵌套太多会难读。

CASE WHEN 可读性更强,逻辑复杂时首选。

3. 兼容性

IF 是 MySQL 特有的写法。

CASE WHEN 是 SQL 标准,几乎所有数据库都支持。

五、面试高频考点

1. 什么时候用 CASE WHEN 而不是 IF?

答:条件超过两种情况时,用 CASE WHEN 更直观。

2. CASE WHEN 可以放在 WHERE 或 ORDER BY 里吗?

答:可以。比如根据条件排序:

SELECT * FROM orders

ORDER BY CASE

WHEN status = 'pending' THEN 1

WHEN status = 'paid' THEN 2

ELSE 3

END;

六、总结

IF:二选一,简单高效。

CASE WHEN:多条件分支,SQL 标准,适合复杂逻辑。

面试常考:区别、适用场景,以及是否能用于 WHERE、ORDER BY。

掌握这两个条件函数,能让 SQL 查询更灵活、更贴近业务逻辑。 🚀

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐