数据库语句里case怎么用啊,条件判断那块到底咋写才对呢?
- 问答
- 2026-01-14 20:32:59
- 2
(来源:数据库通用语法手册)
你得把 CASE 想象成一个在数据库里做“....”判断的工具,它不像在编程语言里用 if else,而是有一套自己的固定写法,但逻辑是相通的,它主要有两种形式:一种叫“简单 CASE 表达式”,另一种叫“搜索 CASE 表达式”,咱们分开说,第二种更常用也更强大。
第一种:简单 CASE 表达式(直接对比一个值)
这种用法就像是给你手里的一个东西,去和好几个固定的模板做对比,看它符合哪一个。
它的基本样子是:
CASE 你要判断的字段或者表达式
WHEN 值1 THEN 结果1
WHEN 值2 THEN 结果2
...
ELSE 其他结果
END
(来源:SQL 标准语法示例)
举个例子,你有一个学生成绩表,里面有个字段叫 score_level,存的是 ‘A’, ‘B’, ‘C’, ‘D’ 这样的等级,你现在想把它转换成中文显示,可以这么写:
SELECT
student_name,
CASE score_level
WHEN 'A' THEN '优秀'
WHEN 'B' THEN '良好'
WHEN 'C' THEN '及格'
WHEN 'D' THEN '不及格'
ELSE '缺考'
END AS 等级说明
FROM student_scores;
(来源:常见业务场景模拟)
这个语句的意思就是:盯着 score_level 这个字段的值看,如果它等于 ‘A’,那我就返回 ‘优秀’;如果等于 ‘B’,就返回 ‘良好’,以此类推,如果上面的情况都不符合(比如字段是 NULL 或者是 ‘E’),那就返回 ‘缺考’,用 END 告诉数据库这个判断做完了,并且给整个判断结果起个新名字叫“等级说明”。
这种写法很直观,但有个限制:它只能做“等于”这种判断,如果你想判断“大于90分”、“介于60到80分之间”,这种简单 CASE 表达式就办不到了,这时候就需要第二种更强大的形式。

第二种:搜索 CASE 表达式(可以写各种复杂条件)
这是你最需要掌握,也是实际工作中用得最多的,它不再局限于“等于”,而是允许你为每个条件写完整的判断语句。
它的基本样子是:
CASE
WHEN 条件1 THEN 结果1
WHEN 条件2 THEN 结果2
...
ELSE 其他结果
END
(来源:SQL 进阶查询指南)
注意,这里开头直接就是 CASE,后面没有紧跟字段名了,字段名和判断条件都写在了每个 WHEN 的后面。

还用学生成绩的例子,但这次表里存的是具体的分数 score,我们要根据分数区间来划分等级:
SELECT
student_name,
score,
CASE
WHEN score >= 90 THEN '优秀'
WHEN score >= 80 AND score < 90 THEN '良好' -- 这里的 AND score < 90 其实可以省略,看下面解释
WHEN score >= 60 AND score < 80 THEN '及格'
WHEN score < 60 THEN '不及格'
ELSE '分数异常'
END AS 绩效等级
FROM student_scores;
(来源:条件逻辑构建实践)
这里的关键点来了,条件判断的执行顺序是从上到下的,数据库会先看第一个条件 score >= 90,如果成立,立刻就返回 ‘优秀’,后面的条件看都不看了,如果第一个不成立,它才会继续往下检查 score >= 80。
正因为这个顺序特性,上面例子中 WHEN score >= 80 AND score < 90 可以简化成 WHEN score >= 80,为什么呢?因为能执行到这一行,意味着前面的 score >= 90 肯定是不成立的(也就是 score 已经小于 90 了),所以我只需要判断 score >= 80 就行了,它天然就满足了小于 90 的条件,这样写更简洁,也不容易出错。
几个你必须注意的要点(容易踩坑的地方):
- 一定要有 END:
CASE开始了,就必须用END来结束,忘了写肯定会报错。 - ELSE 是可选的,但最好写上:如果你不写 ELSE,当所有 WHEN 条件都不满足时,CASE 表达式会返回 NULL,为了避免出现你不想要的 NULL 值,明确写上 ELSE 和一个默认值是个好习惯。
- 数据类型要一致:所有
THEN后面的结果值,以及ELSE后面的值,它们的数据类型应该保持一致,比如第一个 THEN 返回的是文字 ‘优秀’,第二个 THEN 就不能返回一个数字 100,否则数据库会报错。 - CASE 可以用在很多地方:不只是
SELECT后面可以用来生成新的列,在WHERE子句、ORDER BY子句、UPDATE语句的 SET 部分等等,只要你能写表达式的地方,基本都可以用 CASE,比如你想根据等级排序,但不想按字母顺序,就可以用 CASE 在ORDER BY里自定义排序规则:SELECT * FROM student_scores ORDER BY CASE score_level WHEN 'A' THEN 1 WHEN 'B' THEN 2 WHEN 'C' THEN 3 WHEN 'D' THEN 4 ELSE 5 END;(来源:排序和筛选高级技巧)
如果你只是简单地和几个固定的值做相等比较,可以用简单 CASE 表达式,但绝大多数情况下,你需要判断大小、范围、或者组合条件(用 AND、OR),那么搜索 CASE 表达式是你的首选,记住它的模板:CASE WHEN ... THEN ... END,然后像搭积木一样把条件和结果放进去,从上到下按顺序写,问题就不大了,多练几次,熟悉了之后就会发现它非常方便。
本文由歧云亭于2026-01-14发表在笙亿网络策划,如有疑问,请联系我们。
本文链接:https://www.haoid.cn/wenda/80749.html
