集合派生的表

集合派生的表使您能都处理集合表达式的元素(例如虚拟表中的行)。在 SELECT 语句的 FROM 子句中使用 TABLE 关键字来创建集合派生的表。数据库服务器支持 SELECT 、INSERT 、UPDATE 和 DELETE 语句中的集合派生的表。

以下查询使用名为 c_table 的集合派生表访问 superstores_demo 数据库中 sales_rep 表的 sales 列的元素。sales 列是其中两个字段 monthamount 存储销售数据的未命名行类型的集合。当 sales.month 等于 98-03 时,下列查询返回 sales.amount 的元素。由于内部选择本身就是表达式,所以它不能对外部查询的每个迭代返回多个列值。外部查询指定对 sales_rep 表的多少行进行求值。

图: 查询

SELECT (SELECT c_table.amount FROM TABLE (sales_rep.sales) c_table
            WHERE c_table.month = '98-03') 
            FROM sales_rep;

图: 查询结果

(expression)
            
            $47.22 
            $53.22
下列查询使用集合派生的表访问 sales 集合列中 rep_num 列等于 102 的元素。使用集合派生的表,可以为表和列指定列名。如果没有为集合派生的表指定表名,那么数据库服务器会自动创建表名。此示例为集合派生的表 c_table 指定派生列列表 s_months_amount

图: 查询

SELECT * FROM TABLE((SELECT sales FROM sales_rep 
            WHERE sales_rep.rep_num = 102)) c_table(s_month, s_amount);

图: 查询结果

s_month         s_amount 
            
            1998-03           $53.22
            1998-04           $18.22
下列查询创建集合派生的表但不指定派生表或派生列名。除派生列采用 sales_rep 表中的 sales 列的缺省自动名之外,该查询返回与图 3相同的结果。

图: 查询

SELECT * FROM TABLE((SELECT sales FROM sales_rep 
            WHERE sales_rep.rep_num = 102));

图: 查询结果

month             amount 
            
            1998-03           $53.22
            1998-04           $18.22
限制: 集合派生的表是只读的,因此它不能是 INSERT 、UPDATE 或 DELETE 语句的目标表或可更新游标或视图的基础表。

有关集合派生的表的语法和限制的完整描述,请参阅 GBase 8s SQL 指南:语法