GaussDB SQL基本语法示例-CASE表达式
目录
一、前言
SQL是用于访问和处理数据库的标准计算机语言。GaussDB支持SQL标准(默认支持SQL2、SQL3和SQL4的主要特性)。
本系列将以《云数据库GaussDB—SQL参考》在线文档为主线进行介绍。
二、CASE Expression(CASE表达式)介绍
在GaussDB SQL中,CASE表达式(CASE Expression)是一个非常强大且常用的工具,可以用于在SQL中执行基于条件的操作。CASE表达式类似于IF-THEN-ELSE语句,但使用起来更加灵活,易于阅读和编写。
CASE表达式包含两种形式,一种是简单形式,一种是搜索形式。下面将分别介绍这两种形式的写法、语法以及使用方法。
三、GaussDB数据库中的简单CASE表达式
1、基本概念
简单CASE表达式是指在给定的表达式上执行基于等式的比较,如果表达式等于某个值,则执行某个操作。即依据input_expression与when_expression的匹配结果跳转到相应的result_expression。
2、基本语法
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值。
3、示例
假设根据固定的工资定义职员级别,可按如下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。
四、GaussDB数据库中的搜索CASE表达式
1、基本概念
搜索CASE表达式是指在给定的表达式上执行基于不等式的比较,如果表达式满足给定的条件,则执行相应操作。即按指定顺序为每个WHEN子句的boolean_expression求值。返回第一个取值为TRUE的boolean_expression的result_expression。
2、基本语法
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值。
3、示例
假设根据工资的范围定义职员级别,可按如下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代码时,可以根据具体的业务需求灵活选择简单形式或搜索形式来进行编写,这样可以大大提高编码效率和代码可读性。
附:常见使用场景,如:二次定义标签、饱和度统计、计算指标、数据格式转换等。
——结束

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Rust std fs 比 Python 慢!真的吗!?
作者:Xuanwo Databend Labs 成员,数据库研发工程师 https://github.com/xuanwo 我即将分享一个冗长的故事,从 OpenDAL 的 op.read()开始,以一个意想不到的转折结束。这个过程对我来说非常有启发性,我希望你也能感受到。我会尽力重现这个经历,并附上我一路学到的教训。让我们开始吧! 所有的代码片段和脚本都可以在 Xuanwo/when-i-find-rust-is-slow 中找到。 OpenDAL Python 绑定比 Python 慢? OpenDAL 是一个数据访问层,允许用户以统一的方式从各种存储服务中轻松高效地获取数据。我们通过 pyo3 为 OpenDAL 提供了 python 绑定。 有一天,@beldathas 在 discord 向我报告了一个案例,即 OpenDAL 的 python 绑定比 python 慢: importpathlib importtimeit importopendal root=pathlib.Path(__file__).parent op=opendal.Operator("fs",ro...
- 下一篇
时间复杂度为 O(n^2) 的排序算法 | 京东物流技术团队
对于小规模数据,我们可以选用时间复杂度为 O(n2) 的排序算法。因为时间复杂度并不代表实际代码的执行时间,它省去了低阶、系数和常数,仅代表的增长趋势,所以在小规模数据情况下, O(n2) 的排序算法可能会比 O(nlogn) 的排序算法执行效率高。不过随着数据规模增大, O(nlogn) 的排序算法是不二选择。本篇我们主要对 O(n2) 的排序算法进行介绍,在介绍之前,我们先了解一下算法特性: 算法特性: 稳定性:经排序后,若等值元素之间的相对位置不变则为稳定排序算法,否则为不稳定排序算法 原地排序:是否借助额外辅助空间 自适应性: 自适应性排序受输入数据的影响,即最佳/平均/最差时间复杂度不等,而非自适应排序时间复杂度恒定 本篇我们将着重介绍插入排序,选择排序和冒泡排序了解即可。 插入排序 插入排序的工作方式像整理手中的扑克牌一样,即不断地将每一张牌插入到其他已经有序的牌中适当的位置。 插入排序的当前索引元素左侧的所有元素都是有序的:若当前索引为 i,则 [0, i - 1] 区间内的元素始终有序,这种性质被称为循环不变式,即在第一次迭代、迭代过程中和迭代结束时,这种性质始终保持不...
相关文章
文章评论
共有0条评论来说两句吧...