前言:
CASE语句具有两种格式。1、简单CASE函数 2、CASE搜索函数。
场景:
SQL中使用增加一些判断呢???当然使用Case When Then End啦;
例子:
1、举个万年不变学生的问题。有张student表。字段:id、name、sex(0:男 1:女)、grade(成绩) 查询男学生大于80分女学生大于90的学生名单
CASE搜索函数:
SELECT * FROM `student ` where grade > (case when sex = 0 then 80 else 90 end)
简单CASE函数:
SELECT * FROM `student ` where grade > (case sex when 0 then 80 else 90 end)
如果超过两个条件呢?Case When Then End
2、进入泰国的学校了哈。sex值增加个2代表人妖。-.-查询男学生大于80分女学生大于90的人妖大于60的学生名单。
CASE搜索函数:
SELECT * FROM `student ` where grade > (case when sex = 0 then 80 when sex = 1 then 90 when sex = 2 then 60 end)
简单CASE函数:
SELECT * FROM `student ` where grade > (case sex when 0 then 80 when 1 then 90 when 2 then 60 end);
3、十分常用的场景:Code转换Value。一般我们落库的都是Code。比如上面的sex字段,0:男 1:女 2:人妖。现在我想要把对应的code显示对应的中文怎么办??
SELECT *,(case sex when 0 then '男' when 1 then '女' when 2 then '人妖' end) as '性别' FROM `student ` WHERE grade > (case when sex = 0 then 80 when sex = 1 then 90 when sex = 2 then 60 end);
总结:
1、简单CASE函数的写法相对比较简洁,
2、简单CASE函数功能方面会有些限制,无法写判定式,比如:CASE搜索函数可以自定义实现>(大于)、<(小于)、<>(不等于)、IN条件。而简单CASE函数仅仅是等于条件。
3、为了方便理解以上例子都是比较简单的,其实case里面也可以嵌套SQL等更为复杂的逻辑。