SQL 条件函数 IF、CASE WHEN 用法速查
在 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 查询更灵活、更贴近业务逻辑。 🚀