GBase 8s V8.8 SQL 指南:教程-6.4.1(1)

6.4.1 集合子查询
集合子查询使用户能够从子查询表达式构造集合表达式。集合子查询在紧邻子查询之前使
用 MULTISET 关键字以将返回的值转换为 MULTISET 集合。但是,当在子查询表达式
之前使用 MULTISET 关键字时,数据库服务器不会更改基础表的各行而只会修改这些行
的副本。例如,如果将集合子查询传递至修改集合的用户定义的例程,那么会修改集合的
副本而不会修改基础表。
集合子查询是可采用下列任何形式的表达式:
• MULTISET(SELECT expression1, expression2... FROM tab_name...)
• MULTISET(SELECT ITEM expression FROM tab_name...)
在集合子查询中省略 ITEM 关键字
如果在集合子查询表达式中省略 ITEM 关键字,那么集合子查询就是其元素类型始终为未
命名的 ROW 类型的 MULTISET。未命名 ROW 类型的字段与在子查询的 Projection 子
句中指定的表达式的数据类型相匹配。
假设您创建了包含类型为 MULTISET 的列的以下表:
CREATE TABLE tab2 
 (
 id_num INT, 
 ms_col MULTISET(ROW(a INT) NOT NULL)
 );
下列查询显示如何在 WHERE 子句中使用集合子查询来将子查询返回的 INT 值的行转换
为类型为 MULTISET 的集合。在此示例中,数据库服务器在tab2 的 ms_col 列等于集合子
查询表达式的结果时返回行。
图: 查询
SELECT id_num FROM tab2 
 WHERE ms_col = (MULTISET(SELECT int_col FROM tab1)); 
该查询在集合子查询中省略了 ITEM 关键字,因此子查询返回的 INT 值类型为
MULTISET(ROW(a INT) NOT NULL)(它与 tab2 的 ms_col 列的数据类型相匹配)。

你可能感兴趣的:(技术干货,南大通用,gbase,数据库)