写点什么

了解 GaussDB SQL 中 CASE 表达式

  • 2024-05-13
    广东
  • 本文字数:2052 字

    阅读完需:约 7 分钟

了解GaussDB SQL中CASE表达式

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


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


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

发布于: 2024-05-13阅读数: 9
用户头像

提供全面深入的云计算技术干货 2020-07-14 加入

生于云,长于云,让开发者成为决定性力量

评论

发布
暂无评论
了解GaussDB SQL中CASE表达式_数据库_华为云开发者联盟_InfoQ写作社区