返回首页

gbase数据、南大通用产品文档:GBase8aDECODE

更新日期:2024年09月11日

语法
DECODE(value,value1,result1, value2,result2, value3,result3,... , result)
函数说明
类似于CASE value WHEN value1 THEN result1 ....,唯一区别是如果value 为
NULL 值,可以和后面的NULL 值匹配。
示例
示例1:没有匹配的value 值,返回值为result。
gbase> SELECT DECODE(5,1,10,2,20,3,30,4,40, 50) FROM dual;
+-----------------------------------+
| DECODE(5,1,10,2,20,3,30,4,40, 50) |
+-----------------------------------+
|
50 |
+-----------------------------------+
1 row in set
示例2:value 为表达式,与value1 匹配,返回值为result1。

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-04-10)
南大通用数据技术股份有限公司
676
gbase> SELECT DECODE( (2 * 5) ,10,100,20,200,600) FROM dual;
+-------------------------------------+
| DECODE( (2 * 5) ,10,100,20,200,600) |
+-------------------------------------+
|
100 |
+-------------------------------------+
1 row in set

检查办法
通过GBase 8c 提供的性能统计工具gs_checkperf,可以检查硬件性能。
前提条件
GBase 8c 运行状态正常。
运行在数据库之上的业务运行正常。
操作步骤
步骤1 以管理员用户gbase,登录数据库主节点。
步骤2 执行如下命令,对GBase 8c 数据库进行性能检查。
gs_checkperf

GBase 8c 管理员指南
南大通用数据技术股份有限公司
32
具体的性能统计项目请参见《GBase 8c V5_3.0.0 工具参考手册》中“服务端工具>
gs_checkperf > 性能检查项”。
示例
以简要格式在屏幕上显示性能统计结果,执行如下命令:
gs_checkperf -i pmk -U gbase
返回如下信息:
Cluster statistics information:
Host CPU busy time ratio
:

在概念上,任何连接的第一阶段是创建笛卡尔积,要改进或限制此笛卡尔积并除去数据行
的无意义组合,在 SELECT 语句的 WHERE 子句中包括有效的连接条件。
本节说明了跨连接、等值连接、自然连接和多表连接。其他复杂构成(如自连接和外链接)
在编写高级 SELECT 语句中讨论。

跨连接
跨连接组合所有选择的表中的所有行并创建笛卡尔积。跨连接的结果可能会非常大并且难
于管理。
下列查询使用 ANSI 连接语法创建跨连接。
图: 查询
SELECT * FROM customer CROSS JOIN state;
该查询的结果与图 1的结果完全相同。另外,可能通过指定 WHERE 子句来过滤跨连接。

有关笛卡尔积的更多信息,
请参阅创建笛卡尔积。
有关 ANSI 语法的更多信息,
请参阅ANSI
连接语法。

等值连接
等值连接是基于相等或匹配列值的连接。在 WHERE 子句中,使用作为比较运算符的等号
(=)来表示这一相等关系。如下所示。
图: 查询
SELECT * FROM manufact, stock
WHERE manufact.manu_code = stock.manu_code;
该查询在 manu_code 列上连接 manufact 和 stock 表。它只检索两个列的值相等的那些行。
以下结果显示了一些这样的行。
图: 查询结果
manu_code SMT

GBase 8s SQL 指南:教程
南大通用数据技术股份有限公司 - 59 -

manu_name Smith
lead_time 3
stock_num 1
manu_code SMT
description baseball gloves
unit_price $450.00
unit case
unit_descr 10 gloves/case

manu_code SMT
manu_name Smith
lead_time 3
stock_num 5
manu_code SMT
description tennis racquet
unit_price $25.00
unit each
unit_descr each

manu_code SMT
manu_name Smith
lead_time 3
stock_num 6
manu_code SMT
description tennis ball
unit_price $36.00
unit case
unit_descr 24 cans/case

manu_code ANZ
manu_name Anza
lead_time 5
stock_num 5
manu_code ANZ
description tennis racquet
unit_price $19.80
unit each

GBase 8s SQL 指南:教程
南大通用数据技术股份有限公司 - 60 -

unit_descr each

在等值连接中,该结果同时包括 manufact 和 stock 表中的 manu_code 列,原因是选择列表
请求每个列。
还可以使用附加约束创建等值连接,此时比较条件基于连接列中值的不相等性。这些连接
在 WHERE 子句中指定的比较条件中除等号(=)之外还使用其他关系运算符。
要连接包含相同名称的列的表,用列的表名和句点(.)限定每个列名,如下列查询所示。
图: 查询
SELECT order_num, order_date, ship_date, cust_calls.*
FROM orders, cust_calls
WHERE call_dtime >= ship_date
AND cust_calls.customer_num = orders.customer_num
ORDER BY orders.customer_num;
该查询连接 customer_num 列,
然后只选择 cust_calls 表中 call_dtime 大于或等于 orders 表中
的 ship_date 那些行。该结果显示它返回的组合行。
图: 查询结果
order_num 1004
order_date 05/22/1998
ship_date 05/30/1998
customer_num 106
call_dtime 1998-06-12 08:20
user_id maryj
call_code D
call_descr Order received okay, but two of the cans of
ANZ tennis balls within the case were empty
res_dtime 1998-06-12 08:25
res_descr Authorized credit for two cans to customer,
issued apology. Called ANZ buyer to report
the qa problem.

order_num 1008
order_date 06/07/1998
ship_date 07/06/1998
customer_num 110
call_dtime 1998-07-07 10:24

GBase 8s SQL 指南:教程
南大通用数据技术股份有限公司 - 61 -

user_id richc
call_code L
call_descr Order placed one month ago (6/7) not received.
res_dtime 1998-07-07 10:30
res_descr Checked with shipping (Ed Smith). Order out
yesterday-was waiting for goods from ANZ.
Next time will call with delay if necessary.

order_num 1023
order_date 07/24/1998
ship_date 07/30/1998
customer_num 127
call_dtime 1998-07-31 14:30
user_id maryj
call_code I
call_descr Received Hero watches (item # 304) instead
of ANZ watches
res_dtime
res_descr Sent memo to shipping to send ANZ item 304
to customer and pickup HRO watches. Should
be done tomorrow, 8/1

自然连接
自然连接是等值连接的一种,构建它来使连接列不会多余地显示数据,如以下查询所示。
图: 查询
SELECT manu_name, lead_time, stock.*
FROM manufact, stock
WHERE manufact.manu_code = stock.manu_code;
类似等值连接的示例,该查询在 manu_code 列上连接 manufact 和 stock 表。因为更接近地
定义了投影列表,所以只对检索到的每一行列出一次 manu_code ,如下所示。
图: 查询结果
manu_name Smith
lead_time 3
stock_num 1
manu_code SMT

GBase 8s SQL 指南:教程
南大通用数据技术股份有限公司 - 62 -

description baseball gloves
unit_price $450.00
unit case
unit_descr 10 gloves/case

manu_name Smith
lead_time 3
stock_num 5
manu_code SMT
description tennis racquet
unit_price $25.00
unit each
unit_descr each

manu_name Smith
lead_time 3
stock_num 6
manu_code SMT
description tennis ball
unit_price $36.00
unit case
unit_descr 24 cans/case

manu_name Anza
lead_time 5
stock_num 5
manu_code ANZ
description tennis racquet
unit_price $19.80
unit each
unit_descr each

所有的连接都是相关联的。即,WHERE 子句中的连接术语不影响连接的意义。
下列查询中的两个语句都创建相同的自然连接。
图: 查询
SELECT catalog.*, description, unit_price, unit, unit_descr

GBase 8s SQL 指南:教程
南大通用数据技术股份有限公司 - 63 -

FROM catalog, stock
WHERE catalog.stock_num = stock.stock_num
AND catalog.manu_code = stock.manu_code
AND catalog_num = 10017;

SELECT catalog.*, description, unit_price, unit, unit_descr
FROM catalog, stock
WHERE catalog_num = 10017
AND catalog.manu_code = stock.manu_code
AND catalog.stock_num = stock.stock_num;
每个语句检索到下列行。
图: 查询结果
catalog_num 10017
stock_num 101
manu_code PRC
cat_descr
Reinforced, hand-finished tubular. Polyurethane belted.
Effective against punctures. Mixed tread for super wear
and road grip.
cat_picture

cat_advert Ultimate in Puncture Protection, Tires
Designed for In-City Riding
description bicycle tires
unit_price $88.00
unit box
unit_descr 4/box
图 3包括 TEXT 列 cat_descr 、BYTE 列 cat_picture 和 VARCHAR 列 cat_advert。

多表连接
多表连接在一个或多个相关联列上连接两个以上的表。它可以是等值连接或自然连接。
下列查询在 catalog 、stock 和 manufact 表上创建等值连接。
图: 查询
SELECT * FROM catalog, stock, manufact
WHERE catalog.stock_num = stock.stock_num

GBase 8s SQL 指南:教程
南大通用数据技术股份有限公司 - 64 -

AND stock.manu_code = manufact.manu_code
AND catalog_num = 10025;
该查询检索到下列行。
图: 查询结果
catalog_num 10025
stock_num 106
manu_code PRC
cat_descr
Hard anodized alloy with pearl finish; 6mm hex bolt hard ware.
Available in lengths of 90-140mm in 10mm increments.
cat_picture

cat_advert ProCycle Stem with Pearl Finish
stock_num 106
manu_code PRC
description bicycle stem
unit_price $23.00
unit each
unit_descr each
manu_code PRC
manu_name ProCycle
lead_time 9
manu_code 重复三次,每个表一次,stock_num 重复两次。
为避免多表查询的大量重复(如图 1),在投影列表中包括特定的列以更确切地定义
SELECT 语句,如下所示。
图: 查询
SELECT catalog.*, description, unit_price, unit,
unit_descr, manu_name, lead_time
FROM catalog, stock, manufact
WHERE catalog.stock_num = stock.stock_num
AND stock.manu_code = manufact.manu_code
AND catalog_num = 10025;
该查询使用通配符来从具有大多数列的表中选择所有列,然后从其他两个表中指定列。下
表显示了此查询生成的自然连接。它与前一示例显示相同的信息,但不重复。
图: 查询结果

GBase 8s SQL 指南:教程
南大通用数据技术股份有限公司 - 65 -

catalog_num 10025
stock_num 106
manu_code PRC
cat_descr
Hard anodized alloy with pearl finish. 6mm hex bolt
hardware. Available in lengths of 90-140mm in 10mm increments.
cat_picture

cat_advert ProCycle Stem with Pearl Finish
description bicycle stem
unit_price $23.00
unit each
unit_descr each
manu_name ProCycle
lead_time 9