当前位置: 首页 > news >正文

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 查询更灵活、更贴近业务逻辑。 🚀

http://www.dtcms.com/a/389628.html

相关文章:

  • 【深度学习新浪潮】如何估算大模型的训练和推理内存需求?
  • PyTorch查看模块/类的所有方法/属性
  • 8大Android开发框架效率翻倍
  • docker基础知识与具体实践
  • 【多模态】Simple o3 提高多模态模型准确率
  • hybrid的配置
  • 理解虚拟细胞:初学者指南
  • 哪种体量的公司或者哪些行业哪些项目需要上云服务器?
  • Linux安装问题:404 Not Found?配置源列表sources.list,修改为可用镜像源就可以了!
  • Vue3 中 props 与 $emit 的使用及 defineProps 与 defineEmits 的区别详解
  • vue的跨域配置
  • 计算机网络实验03:交换机VLAN配置
  • Vue中v-if与v-show的区别及应用场景解析
  • C++造轮子:手搓 List 容器
  • redis-list的基本介绍
  • ​​[硬件电路-247]:开关电源的工作原理、优缺点及应用场合
  • 【面试】Java中的垃圾回收算法详解
  • AI使用心得-完善中
  • rust编写web服务01-项目起步与环境准备
  • ORM框架及SQLAlchemy
  • 驱动开发---双机调试搭建支持win11(2025)
  • 驱动开发1:内核程序框架
  • 生产制造如何应对客户的订单变更
  • 深入浅出SpringMVC:从入门到实战指南
  • 深度学习入门:从感知机到多层感知机,用逻辑电路讲透神经网络的进化
  • macos m1 芯片无法安装kubeedge keadm 解决办法
  • 猎板 PCB:以全维度工艺突破,构建 PCB 制造技术壁垒
  • android12 SDK31 wifi开发(仅提供连接wifi的工具类)
  • Android播放视频适配黑边问题类型总结
  • 第十一章:AI进阶之--模块的概念与使用(二)