case语句是一个非常有趣的语句,它的结果是一个值,这意味着凡是能用到单值的地方都可以用case语句。
基本结构
case语句的基本结构如下:
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
ELSE result3
END
其中case..end是一对,标志着语句的开始和结束。when后边是条件,then后边则是结果,else后边跟的则是默认值。
case...end语句像是一个无参但有返回值的函数,这一特性使得其基本上可以用于语句的任何地方。
用于select部分
一般来说,ui页面中的选项在数据库中存的都是数字。但在报表或者查询结果中,我们想看到的肯定不是不可理解的数字,所以需要进行一些转换,这是case when最常见的使用场景。
这里我们以选课表为例展示下如何在select部分中使用
select
case
when cs.selection_id = 1 then '第一'
else '第二'
end
from
course_selections cs;
结果
用于where部分
当case...when用在where部分时,有两种情况,一种情况是其本身的结果即是布尔值,一种情况是用返回值和其他值进行比较。
比如这里我们要选择导师为Prof. Smith的课程,可以使用如下语句:
select
*
from
courses c
where
case when c.instructor ='Prof. Smith' then true
else false
end;
这个sql中where部分case...when返回的是布尔值。
我们也可以这样写
select
*
from
courses c
where
case when c.instructor ='Prof. Smith' then 1
else 2
end=1;
结果是相同的,但这里使用的是case...when的结果进行的比较。
小结
这一节我们学习了case...when语句的使用。它可以被认为是一个无参但有返回值的函数。常用在select和where中,给我们的SQL增加了更多的可能性。