赞
踩
本文分享自华为云社区《GaussDB SQL基本语法示例-CASE表达式》,作者:Gauss松鼠会小助手2。
SQL是用于访问和处理数据库的标准计算机语言。GaussDB支持SQL标准(默认支持SQL2、SQL3和SQL4的主要特性)。
本系列将以《云数据库GaussDB—SQL参考》在线文档为主线进行介绍。
在GaussDB SQL中,CASE表达式(CASE Expression)是一个非常强大且常用的工具,可以用于在SQL中执行基于条件的操作。CASE表达式类似于IF-THEN-ELSE语句,但使用起来更加灵活,易于阅读和编写。
CASE表达式包含两种形式,一种是简单形式,一种是搜索形式。下面将分别介绍这两种形式的写法、语法以及使用方法。
简单CASE表达式是指在给定的表达式上执行基于等式的比较,如果表达式等于某个值,则执行某个操作。即依据input_expression与when_expression的匹配结果跳转到相应的result_expression。
- CASE input_expression
-
- WHEN when_expression THEN result_expression
-
- [...n]
-
- [ELSE else_result_expression]
-
- END;
说明:
其中,input_expression表示需要比较的表达式,when_expression等表示需要比较的值,result_expression等表示各个值相等时的结果,else_result_expression表示当input_expression不等于任何值时的默认结果
Tip:
CASE:简单CASE函数中支持子查询,但须注意input_expression与when_expression是可匹配的。 另外,如果没有取值为TRUE的input_expression = when_expression,则当指定ELSE子句时,DLI将返回else_result_expression;当没有指定ELSE子句时,返回NULL值。
假设根据固定的工资定义职员级别,可按如下SQL执行:
- SELECT name
-
- ,salary
-
- ,CASE salary
-
- WHEN 15000 THEN '初级'
-
- WHEN 20000 THEN '中级'
-
- WHEN 25000 THEN '高级'
-
- WHEN 30000 THEN '高级'
-
- WHEN 35000 THEN '高级'
-
- ELSE NULL
-
- END AS level
-
- FROM company
-
- ORDER BY salary;
SQL语句解析:
测试使用的是在GaussDB数据库中创建的一张company表。
这段SQL是从“company”表中选择员工的名字(name)、薪水(salary)以及一个根据薪水等级分类的字段(level)。并使用“ORDER BY salary”语句将结果按照薪水从低到高的顺序进行排序。
简单CASE表达式的工作方式:
如果“salary”字段的值等于15000,那么“level”字段的值就是“初级”。
如果“salary”字段的值等于20000,那么“level”字段的值就是“中级”。
如果“salary”字段的值等于25000或30000或35000,那么“level”字段的值都是“高级”。
如果“salary”字段的值不等于以上任何值,那么“level”字段的值就是NULL。
搜索CASE表达式是指在给定的表达式上执行基于不等式的比较,如果表达式满足给定的条件,则执行相应操作。即按指定顺序为每个WHEN子句的boolean_expression求值。返回第一个取值为TRUE的boolean_expression的result_expression。
- CASE WHEN boolean_expression THEN result_expression
-
- [...n]
-
- [ELSE else_result_expression]
-
- END;
说明:
其中,boolean_expression等表示需要比较的条件,result_expression等表示满足对应条件时的操作结果,else_result_expression表示当expression不满足任何条件时的默认结果。
Tip:
boolean_expression:可以包含子查询,但整个boolean_expression表达式返回值只能是布尔类型。
如果没有取值为TRUE的Boolean_expression,则当指定ELSE子句时,DLI将返回else_result_expression;当没有指定ELSE子句时,返回NULL值。
假设根据工资的范围定义职员级别,可按如下SQL执行:
- SELECT name
-
- ,salary
-
- ,CASE WHEN salary < 15000 THEN '初级'
-
- WHEN salary BETWEEN 15000 AND 25000 THEN '中级'
-
- WHEN salary >25000 THEN '高级'
-
- ELSE NULL
-
- END AS level
-
- FROM company
-
- ORDER BY salary;
SQL语句解析:
这段SQL同上文,是从"company"表中选择员工的姓名(name)、薪水(salary)以及根据薪水等级进行分类(level)。
搜索CASE表达式的工作方式:
当薪水(salary)小于15000时,薪水等级被标记为"初级"。
当薪水在15000和25000之间(包括15000和25000)时,薪水等级被标记为"中级"。
当薪水大于25000时,薪水等级被标记为"高级"。
如果以上条件都不满足,薪水等级被标记为NULL。
综上,这个SQL语句的主要目的是获取员工信息,根据其薪水水平对其进行分类,并按照薪水的水平进行排序。
GaussDB 中的CASE表达式是一个非常有用的工具,可以用于在SQL中执行基于条件的操作,实现条件判断和分支逻辑,进一步优化数据库查询和操作。在编写SQL代码时,可以根据具体的业务需求灵活选择简单形式或搜索形式来进行编写,这样可以大大提高编码效率和代码可读性。
附:常见使用场景,如:二次定义标签、饱和度统计、计算指标、数据格式转换等。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。