了解GaussDB SQL中CASE表达式

news/2024/9/25 3:25:29

本文分享自华为云社区《GaussDB SQL基本语法示例-CASE表达式》,作者:Gauss松鼠会小助手2。

一、前言

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_expressionWHEN 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 salaryWHEN 15000 THEN '初级'WHEN 20000 THEN '中级'WHEN 25000 THEN '高级'WHEN 30000 THEN '高级'WHEN 35000 THEN '高级'ELSE NULLEND AS levelFROM companyORDER 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 NULLEND AS levelFROM companyORDER BY salary;

SQL语句解析

这段SQL同上文,是从"company"表中选择员工的姓名(name)、薪水(salary)以及根据薪水等级进行分类(level)。

搜索CASE表达式的工作方式:

当薪水(salary)小于15000时,薪水等级被标记为"初级"。

当薪水在15000和25000之间(包括15000和25000)时,薪水等级被标记为"中级"。

当薪水大于25000时,薪水等级被标记为"高级"。

如果以上条件都不满足,薪水等级被标记为NULL。

综上,这个SQL语句的主要目的是获取员工信息,根据其薪水水平对其进行分类,并按照薪水的水平进行排序。

五、小结

GaussDB 中的CASE表达式是一个非常有用的工具,可以用于在SQL中执行基于条件的操作,实现条件判断和分支逻辑,进一步优化数据库查询和操作。在编写SQL代码时,可以根据具体的业务需求灵活选择简单形式或搜索形式来进行编写,这样可以大大提高编码效率和代码可读性。

常见使用场景,如:二次定义标签、饱和度统计、计算指标、数据格式转换

点击关注,第一时间了解华为云新鲜技术~

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/30867.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

【OpenVINO™】在 C# 中使用OpenVINO™ 部署PP-YOLOE实现物体检测

PP-YOLOE是基于PP-YOLOv2的优秀单级无锚模型,超越了各种流行的YOLO模型。PP-YOLOE有一系列型号,命名为s/m/l/x,通过宽度乘数和深度乘数进行配置。PP-YOLOE避免使用特殊的运算符,如可变形卷积或矩阵NMS,以便友好地部署在各种硬件上。 在本文中,我们将使用OpenVINO™ C# AP…

2022广东大学生攻防大赛WP

MISC 复合 尝试导出http数据 发现文件类型和文件名都被改过把pass.md改为pass.zip,发现打不开 添加文件头解压得到 Emklyusg=E2=80=82gni=E2=80=82bvvymlag=E2=80=82tsqic=E2=80=82colz=E2=80=82jx= moxvl=E2=80=82tiwhz=E2=80=82ebmee,=E2=80=82Zhjeoig=E2=80=82Krpvpi-Zgvly…

干了 2 年多 Java 外包,终于脱离了!

大家好,我是R哥。 金三银四结束了,上个月分享了一个 35K 入职的面试辅导案例:35K*14 薪入职了,这公司只要不裁员,我能一直呆下去。。今天再分享一个上个月让人很有成就感的面试辅导 case: 外包、空窗四个月、薪资 10k、996 ——> 甲方公司、薪资15k、早九晚六(WLB),…

使用Lambda表达式和接口的简单Java 8 Predicate示例

大量的Java编程涉及到对真或假值的评估,从条件语句到迭代循环。当您使用JDK的Streams API和Lambda函数时,可以使用备受欢迎的Java Predicate接口来简化布尔条件的评估。 也被称为Java 8 Predicate(源自引入函数式编程的JDK版本),这个简单的接口定义了五个方法,尽管只有Ja…

docker快速部署 influxdb+telegraf+grafana 推送主机及docker容器监控数据 并展示图形化

简述 1、InfluxDB InfluxDB是用Go语言编写的一个开源分布式时序、事件和指标数据库,无需外部依赖。2、Telegraf Telegraf是一个插件驱动的服务器代理,用于收集和报告指标,并且是TICK Stack的第一部分。 Telegraf插件可以直接从它运行的系统中获取各种指标,从第三方API中提取…

软件安装过程中autogen.sh文件的作用

001、软件安装过程中autogen.sh文件的作用(base) [root@pc1 vcftools-0.1.16]# ls ## 原始解压后的文件, 有autogen.sh autogen.sh configure.ac LICENSE README.md vcftools-0.1.16.tar.gz build-aux examples Makefile.am src (base) [root@pc1 vcf…

传统FTP弊端显现 国产ftp要如何选择?

FTP(File Transfer Protocol)是一个用于在网络上的计算机之间传输文件的协议。它属于网络协议组的应用层,主要用于文件的上传、下载和文件管理操作,是一种比较通用、操作也比较简单的传输方式。不过随着国产化大浪潮的推进,很多组织机构都需要替换成国产FTP了。使用国产FT…

Mybatis之动态SQL使用讲解

目录1 动态SQL1.1 引言1.2 数据准备1.3 if 标签1.3.1 在 WHERE 条件中使用 if 标签1.3.2 在 UPDATE 更新列中使用 if 标签1.3.3 在 INSERT 动态插入中使用 if 标签1.4 choose 标签1.5 trim(set、where)1.5.1 where1.5.2 set1.5.3 trim1.5.3.1 trim 来表示 where1.5.3.2 trim 来…