6.4.2 集合派生的表 集合派生的表使您能都处理集合表达式的元素(例如虚拟表中的行)。在 SELECT 语句的 FROM 子句中使用 TABLE 关键字来创建集合派生的表。数据库服务器支持 SELECT 、 INSERT 、UPDATE 和 DELETE 语句中的集合派生的表。 以下查询使用名为 c_table 的集合派生表访问 superstores_demo 数据库中 sales_rep 表 的 sales 列的元素。sales 列是其中两个字段 month 和amount 存储销售数据的未命名行类型 的集合。当 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_month 和 s_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 指南:语法》。
|