[GaussDB] 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://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/24.1.30/productdesc/qlh_03_0001.html

<think>嗯,我现在需要回答用户关于GaussDBSQL查询语言语法的问题。首先,我得确认自己是否了解GaussDB的基本信息。GaussDB是华为公司开发的一款关系型数据库,支持分布式架构,适用于大规模数据处理。它兼容标准的SQL语法,但可能有一些特有的扩展或优化。 用户要求结构清晰的回答,逐步介绍,所以应该分点说明。首先,可能需要从基础查询结构开始,比如SELECT语句的基本用法。然后是数据操作语言(DML)、数据定义语言(DDL)、数据控制语言(DCL)等方面。此外,GaussDB可能有自己的特性,比如分布式执行计划、特定的函数或优化器提示,这些也应该涵盖进去。 需要注意用户提到的格式要求,所有行内数学表达式要用$...$,独立公式用$$...$$,但这个问题可能涉及较少的数学公式,更多的是代码示例。不过如果有需要举例的地方,比如函数的使用,可能需要用行内代码或代码块来展示。 另外,用户希望语法正确,所以需要确保提供的SQL示例是正确的,符合GaussDB的规范。可能需要查阅GaussDB的官方文档,确认某些语法细节,比如是否支持特定的JOIN语法、窗口函数、CTE(公共表表达式)等。 还需要考虑用户可能的实际应用场景,比如他们可能在进行数据分析、事务处理或数据库管理,因此回答中应涵盖不同方面的SQL语法,如聚合函数、事务控制语句、索引创建等。 可能的结构如下: 1. 基本查询结构(SELECT、FROM、WHERE) 2. DML(INSERT、UPDATE、DELETE) 3. DDL(CREATE、ALTER、DROP) 4. 高级特性(分布式查询、窗口函数、索引优化) 5. 事务控制(BEGIN、COMMIT、ROLLBACK) 6. 特有功能或扩展(如华为提到的某些分布式优化) 需要注意避免过于技术化的术语,但又要准确。同时,确保每个部分都有示例,比如展示一个SELECT语句的示例,并说明各个子句的作用。 可能还需要提到GaussDBSQL标准的兼容性,以及与其他数据库(如PostgreSQL、MySQL)的差异,但用户没有特别问比较,所以可能不需要深入,除非相关。 最后,检查是否符合用户的所有要求:中文回答、结构清晰、分步骤、语法正确,正确使用LaTeX格式(如果有数学表达式的话,但这个问题可能较少涉及,可能需要用代码块展示SQL语句)。</think>GaussDB(华为开源关系型数据库)的SQL查询语言语法兼容ANSI SQL标准,并针对分布式场景进行了优化。以下从基础到高级逐步介绍其核心语法--- ### 一、基础查询结构 **语法模板**: ```sql SELECT [DISTINCT] 列名1, 列名2, 聚合函数(...) FROM 表名 [WHERE 条件] [GROUP BY 分组列] [HAVING 分组过滤条件] [ORDER BY 排序列 [ASC|DESC]] [LIMIT 行数]; ``` **示例**: ```sql SELECT name, age, AVG(salary) FROM employees WHERE department = 'IT' GROUP BY name, age HAVING AVG(salary) > 10000 ORDER BY age DESC LIMIT 10; ``` --- ### 二、数据操作语言(DML) 1. **插入数据** ```sql INSERT INTO 表名 (列1, 列2) VALUES (值1, 值2), (值3, 值4); ``` 2. **更新数据** ```sql UPDATE 表名 SET 列1 = 新值 WHERE 条件; ``` 3. **删除数据** ```sql DELETE FROM 表名 WHERE 条件; ``` --- ### 三、数据定义语言(DDL) 1. **创建表** ```sql CREATE TABLE 表名 ( 列1 数据类型 [PRIMARY KEY], 列2 数据类型 [NOT NULL], 列3 数据类型 DEFAULT 默认值 ) DISTRIBUTE BY HASH(列1); -- 分布式场景下指定分布键 ``` 2. **修改表结构** ```sql ALTER TABLE 表名 ADD COLUMN 新列名 数据类型; ``` 3. **删除表** ```sql DROP TABLE 表名; ``` --- ### 四、高级特性 1. **分布式JOIN优化** 通过`/*+ hashjoin(...) */`等Hint指定连接策略
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值