首页 > 数据库 >GaussDB SQL基础语法示例-常见的条件表达式

GaussDB SQL基础语法示例-常见的条件表达式

时间:2024-11-26 09:32:49浏览次数:14  
标签:返回 salary 示例 GaussDB 参数 SQL 表达式

一、前言

SQL是用于访问和处理数据库的标准计算机语言。GaussDB支持SQL标准(默认支持SQL2、SQL3和SQL4的主要特性)。

本系列将以《云数据库GaussDB—SQL参考》为主线进行介绍。

二、条件表达式的概念及GaussDB中的常见条件表达式

条件表达式是指在数据库中进行SQL语句查询时,根据特定条件筛选出符合要求的数据所使用的表达式。 在GaussDB数据库中,CASE、DECODE、COALESCE、NULLIF、GREATEST和NVL等都是常用的条件表达式。

CASE:根据条件进行多分支判断,根据不同的条件返回不同的结果。
DECODE:GaussDB数据库提供的函数功能,相当于SQL语言中的IF-THEN-ELSE语句,根据第一个参数和后续参数进行比较,返回符合条件的结果。
COALESCE:返回第一个非空的参数值。如果所有参数都为空,那么就会返回NULL。COALESCE不会计算不需要用来判断结果的参数;即在第一个非空参数右边的参数不会被计算。
NULLIF:用于比较两个字段的值,如果它们相等,则返回NULL,否则返回第一个字段的值。要求两个表达式数据类型一致。
GREATEST:用于返回多个数字值中的最大值。
NVL:接受两个参数,如果第一个参数为空,则返回第二个参数的值;如果第一个参数不为空,则返回第一个参数的值。
下文将逐一进行介绍。

三、GaussDB中常用的条件表达式(语法 + 示例)

1、CASE表达式
1)语法:

CASE WHEN condition1 THEN result1

           WHEN condition2 THEN result2

           ……

           ELSE result

 END

说明:根据条件进行多分支判断,根据不同的条件返回不同的结果。

如果结果为真,CASE表达式的结果就是符合该条件所对应的result。
如果结果为假,则以相同方式处理随后的WHEN或ELSE子句。
如果各WHEN condition都不为真,表达式的结果就是在ELSE子句执行的result。如果省略了ELSE子句且没有匹配的条件,结果为NULL。
2)示例:

SELECT name

              ,age

              ,CASE

                         WHEN age < 18 THEN '未成年'

                         WHEN age >= 18 AND age < 60 THEN '成年'

                         ELSE '老年'

               END AS age_group

FROM company;

在这里插入图片描述

解析:

这段代码主要是从 "company" 表中选择 "name" 和 "age" 数据,并通过“CASE表达式”为每个用户生成一个根据年龄划分的组别('未成年'、'成年' 或 '老年')。

另参见,前面的文章《GaussDB SQL基本语法示例-CASE表达式》 。

2、DECODE表达式
1)语法:

DECODE(base_expression,compare1,value1,compare(n),value(n),default)

说明:GaussDB数据库提供的函数功能,相当于IF-THEN-ELSE语句,根据第一个参数和后续参数进行比较,返回符合条件的结果。

2)示例:

SELECT name

              ,salary

              ,DECODE(salary, NULL, '未知', 5000, '初级标准线', 20000, '中级标准线',30000, '高级级标准线', '其他') AS salary_level

FROM company ORDER BY salary ;

在这里插入图片描述

解析:

这段代码的目的是从 "company" 表中选择 "name" 和 "salary" 数据,并通过“DECODE表达式”定义工资级别('未知'、'初级标准线'、'中级标准线'、 '高级标准线'、‘其他’)。

3、COALESCE表达式
1)语法:

COALESCE(value1,value2,…)

说明:返回第一个非空的参数值。如果所有参数都为空,那么就会返回NULL。COALESCE不会计算不需要用来判断结果的参数;即在第一个非空参数右边的参数不会被计算。

2)示例:

SELECT name

              ,COALESCE(address, '未知地址') AS address

FROM company;

在这里插入图片描述

解析:这个查询将返回每个员工的名字和地址,通过“表达式COALESCE”判断,如果地址未知,它将显示 '未知地址'。

4、NULLIF表达式
1)语法:

NULLIF(value1,value2)

说明:用于比较两个字段的值,如果它们相等,则返回NULL,否则返回第一个字段的值。要求两个表达式数据类型一致。

2)示例:

SELECT NULLIF('abc', 'abc'); -- 返回NULL

SELECT NULLIF('abc', '123'); -- 返回'123'

5、GREATEST/ LEAST表达式
1)语法:

GREATEST(value1,value2,…)

LEAST(value1,value2,…)

说明:GREATEST用于返回多个数字值中的最大值。LEAST,从一个任意数字表达式的列表里选取最小的数值。以上的数字表达式必须都可以转换成一个普通的数据类型。

2)示例:

SELECT GREATEST(10, 20, 30); -- 返回30

SELECT LEAST(10, 20, 30); -- 返回10

6、NVL表达式
1)语法:

NVL(value1,value2,…)

说明:接受两个参数,如果第一个参数为空,则返回第二个参数的值;如果第一个参数不为空,则返回第一个参数的值,参数类型必须一致。

2)示例:

SELECT name

              ,salary

              ,NVL(salary,default_salary) AS d_salary

FROM company;

在这里插入图片描述

解析:这个查询将返回每个员工的名字和薪水,通过“表达式NVL”判断,如果salary为空,则用取默认的default_salary 。

四、小结

条件表达式是数据库查询中非常有用的工具,今天介绍的CASE、DECODE、COALESCE、NULLIF、GREATEST和NVL等,在GaussDB数据库中是非常常用的,通过使用这些条件表达式,我们可以更加灵活地对数据进行查询和操作,提高程序的效率和可读性。同时,它们也使得数据的处理更为方便和快捷,为数据分析和决策提供了有力的支持。

--结束

​https://bbs.huaweicloud.com/forum/forum-565-1.html

标签:返回,salary,示例,GaussDB,参数,SQL,表达式
From: https://www.cnblogs.com/xiaoxu0211/p/18569294

相关文章

  • MySQL的补充知识点
    SQL注入?定义:MySQL的sql注入是一种攻击技术,攻击者通过再应用程序中插入恶意的sql代码,从而控制应用程序和服务器之间的交互,当应用程序未对用户输入进行适当验证或转义时,这种攻击就可能发生。发生的情况:未对用户输入进行验证:当Web应用程序直接将用户输入拼接到SQL查询语句中,而......
  • 自定义MyBatis分页插件和自定义慢SQL统计插件实践
    ......
  • 基于微信小程序的平价药房管理系统+LW参考示例
    1.项目介绍系统角色:管理员、医生、普通用户功能模块:用户管理、医生管理、药品分类管理、药品信息管理、在线问诊管理、生活常识管理、日常提醒管理、过期处理、订单管理等技术选型:SpringBoot,Vue,uniapp等测试环境:idea2024,jdk17(太低会报错),maven3,微信开发工具,HbuilderX,navicat......
  • MySQL 查询做了这些优化后,纵享丝滑…… 转载
    一、前言 在程序上线运行一段时间后,一旦数据量上去了,或多或少会感觉到系统出现延迟、卡顿等现象,出现这种问题,就需要程序员或架构师进行系统调优工作了。 其中,大量的实践经验表明,调优的手段尽管有很多,但涉及到SQL调优的内容仍然是非常重要的一环,本文将结合实例,总结一些工作中......
  • MySQL面试攻略:从基础到高级,全面解析
    ......
  • MySQL原理简介—7.redo日志的底层原理
    大纲1.redo日志对事务提交后数据不丢失的意义2.redo日志文件的构成3.redo日志会写入到RedoLogBlcok中4.redo日志如何写入到RedoLogBlcok中5.RedoLogBuffer解析6.RedoLogBuffer的刷盘时机7.undolog回滚日志原理 1.redo日志对事务提交后数据不丢失的意义(1)redo......
  • MySQL原理简介—8.MySQL并发事务处理
    大纲1.简单总结增删改SQL语句的实现原理2.多个事务同时执行的场景遇到的问题3.多个事务并发更新或查询时可能出现的问题4.SQL标准中对事务的4个隔离级别5.MySQL是如何支持4种事务隔离级别的6.Spring事务注解了如何设置隔离级别7.uodolog多版本链介绍8.基于undolog多版本......
  • 基于Java+SpringBoot+Mysql在线简单拍卖竞价拍卖竞拍系统功能设计与实现七
    一、前言介绍:免费学习:猿来入此1.1项目摘要主要源于互联网技术的快速发展和电子商务的普及。随着网络技术的不断进步,人们越来越依赖于互联网进行购物、交易和沟通。电子商务的兴起为在线拍卖提供了广阔的市场和便利的条件。在线拍卖系统通过搭建一个虚拟的拍卖平台,将传统......
  • 基于Java+SpringBoot+Mysql在线简单拍卖竞价拍卖竞拍系统功能设计与实现八
    一、前言介绍:免费学习:猿来入此1.1项目摘要主要源于互联网技术的快速发展和电子商务的普及。随着网络技术的不断进步,人们越来越依赖于互联网进行购物、交易和沟通。电子商务的兴起为在线拍卖提供了广阔的市场和便利的条件。在线拍卖系统通过搭建一个虚拟的拍卖平台,将传统......
  • 【Z2400012】基于Java+SpringBoot+Vue+mysql实现的职工管理系统(附源码 配置 文档)
    职工管理系统1.摘要2.开发目的和意义3.系统功能设计4.系统界面截图5.源码获取1.摘要本系统是一个基于SpringBoot和Vue框架实现的职工管理系统,旨在满足现代公司和组织对员工信息、考勤、工资等多方面的管理需求。系统设计了管理员、人事经理、职工三种角色,每种角色拥......