SQL编程思想:基于5种主流数据库代码实现
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人


3.3.2 搜索CASE表达式

搜索CASE表达式的语法如下:

语句执行时首先判断第1个WHEN子句中的条件(condition1)是否成立,如果成立,则返回对应THEN子句中的结果(result1);如果不成立,则继续判断第2个WHEN子句中的条件(condition2)是否成立,如果成立则返回对应THEN子句中的结果(result2);依此类推。如果没有任何条件成立,返回ELSE子句中的默认结果(default);如果没有指定ELSE子句,返回空值。

搜索CASE表达式的计算过程如图3.2所示。

图3.2 搜索CASE表达式的计算过程

前文中的简单CASE表达式示例可以使用等价的搜索CASE表达式实现:

搜索CASE表达式中的判断条件可以像WHERE子句中的过滤条件一样复杂。例如,以下查询基于员工的月薪将他们的收入分为“高”“中”“低”三个级别:

在月薪低于10 000元时,返回“低收入”;否则,如果月薪低于20 000元(高于或等于10 000元),返回“中收入”;在月薪高于或等于20 000元时,返回“高收入”。查询返回的结果如下:

CASE表达式也可以在其他子句中使用,包括WHERE、ORDER BY等子句。例如,以下语句使用CASE表达式实现了空值的自定义排序:

其中,ORDER BY子句中的CASE表达式将bonus为空的数据转换为0,从而实现了空值排在最前的效果。查询返回的结果如下:

CASE表达式是SQL中的一个非常实用的功能,而且在5种数据库中的实现一致。除标准的CASE表达式外,一些数据库还提供了专有的扩展函数。