首页 > 数据库 >了解GaussDB SQL中CASE表达式

了解GaussDB SQL中CASE表达式

时间:2024-05-13 10:40:57浏览次数:9  
标签:CASE salary GaussDB result SQL expression 表达式

本文分享自华为云社区《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_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代码时,可以根据具体的业务需求灵活选择简单形式或搜索形式来进行编写,这样可以大大提高编码效率和代码可读性。

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

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

 

标签:CASE,salary,GaussDB,result,SQL,expression,表达式
From: https://www.cnblogs.com/huaweiyun/p/18188774

相关文章

  • MySQL中的FOUND_ROWS()与ROW_COUNT()函数
    参考:https://www.cnblogs.com/JennyYu/p/16888090.htmlFOUND_ROWS():found_rows()用于查询同一连接下,上一条执行select查询返回的行数,包括show语句返回的行数。中间可以插入执行dml语句,返回依然是上一条select语句返回的行数。使用sql_calc_found_rows与found_rows()组合,可以查......
  • Mybatis之动态SQL使用讲解
    目录1动态SQL1.1引言1.2数据准备1.3if标签1.3.1在WHERE条件中使用if标签1.3.2在UPDATE更新列中使用if标签1.3.3在INSERT动态插入中使用if标签1.4choose标签1.5trim(set、where)1.5.1where1.5.2set1.5.3trim1.5.3.1trim来表示where1.5.3.2trim来表......
  • MySQL 死锁案例
    记一次MySQL死锁分析处理过程,聊聊我的思路。前车之鉴,后事之师。以一个例子为切入点一、问题背景某业务模块反馈数据库最近出现过几次死锁告警的情况,本文总结了这次死锁排查的全过程,并分析了导致死锁的原因及解决方案。希望给大家提供一个死锁的排查及解决思路。基础环境:......
  • SQLServer统计监控SQL执行计划突变的方法
    使用动态管理视图(DMVs)来检测SQL执行计划的突变,你需要关注那些能够提供查询执行统计和计划信息的视图。以下是一些可以用于此目的的DMVs以及相应的查询示例:sys.dm_exec_query_stats:这个视图提供了关于SQLServer中查询执行的统计信息,包括CPU时间、总工作时间、执行次数等。SEL......
  • SQLServer如何查询近3分钟最消耗CPU的SQL
    在SQLServer中,要查询近3分钟最消耗CPU的SQL语句,可以使用sys.dm_exec_query_stats动态管理视图结合sys.dm_exec_sql_text函数来获取SQL语句的文本。不过,直接查询近3分钟的数据可能需要一些额外的逻辑来筛选时间范围,因为sys.dm_exec_query_stats并不直接提供时间筛选的功能。一种......
  • php centos选择sqlserver的驱动和扩展选择版本的说明
    2023年2月23日13:41:48首先是phpphp扩展驱动数据库的关系官方文档说明:https://learn.microsoft.com/zh-cn/sql/connect/php/step-1-configure-development-environment-for-php-development?view=sql-server-2017https://learn.microsoft.com/zh-cn/sql/connect/php/syste......
  • Mysql中的索引下推优化
    当索引下推开启后,如果where子句中的部分条件可以通过索引中的列来进行过滤,MySQL会把这部分条件也下推给存储引擎。这里的关键是下推的这部分条件用于过滤而非定位数据。直接看官方的例子:SELECT*FROMpeopleWHEREzipcode='95054'ANDlastnameLIKE'%etrunia%'ANDad......
  • 初识PostgreSql
    前言PostgreSql常被称为Postgres,简称PG,后文中以PG称呼。是当今非常流行的一种数据库。为什么使用PG在分析这个问题之前,我认为有必要说一说Oracle和MySql这两家数据库。OracleOracle作为占有率最高的数据库,由Oracle公司开发,提供商业支持,其流行的原因在于其强大的性能......
  • Pgsql报错修复
     1   这里更改安装目录bin下面例如E:\WorkingSoftware\PostgreSql\16\bin 更改权限,下面都改下  2如果安装时提示databse出错,就初始化下 E:\WorkingSoftware\PostgreSql\16\bin\pg_ctl.exe-DE:\WorkingSoftware\PostgreSql\16\datainitdb ......
  • 厉害了!12秒将百万数据通过EasyExcel导入MySQL数据库中
    一、写在开头我们在上一篇文章中提到了通过EasyExcel处理Mysql百万数据的导入功能(一键看原文),当时我们经过测试数据的反复测验,100万条放在excel中的数据,4个字段的情况下,导入数据库,平均耗时500秒,这对于我们来说肯定难以接受,今天我们就来做一次性能优化。二、性能瓶颈分析一般的......