从集合中选择

本节描述如何查询对集合类型定义的列。集合类型是一种复杂 数据类型。其中每个集合值包含具有相同数据类型的一组元素。有关集合数据类型的详细描述,请参阅 GBase 8s 数据库设计和实现指南。有关如何访问集合包含的个别元素的信息,请参阅处理 SELECT 语句中的集合

下图显示 manager 表,在本节的示例中使用了该表。manager 表同时包含简单集合类型和嵌套集合类型。简单集合是一种集合类型。它不包含本身就是集合类型的任何字段。 manager 表的 direct_reports 列就是一个简单集合。嵌套集合是包含另一集合类型的集合类型。manager 表的 projects 列就是一个嵌套集合。

图: manager 表

CREATE TABLE manager
          (
          mgr_name        VARCHAR(30),
          department      VARCHAR(12),
          direct_reports  SET(VARCHAR(30) NOT NULL),
          projects        LIST(ROW(pro_name VARCHAR(15),
          pro_members SET(VARCHAR(20) NOT NULL) 
          ) NOT NULL)
          )
对于表中的每一行,对作为集合类型的列的查询返回特定集合包含的所有元素。例如:以下查询显示对 manager 表的每一行返回 department 列中的数据和 direct_reports 列中的所有元素的查询。

图: 查询

SELECT department, direct_reports FROM manager

图: 查询结果

department      marketing
            direct_reports  SET {Smith, Waters, Adams, Davis, Kurasawa}
            
            department      engineering
            ddirect_reports  SET {Joshi, Davis, Smith, Waters, Fosmire, Evans, Jones}
            
            department      publications
            direct_reports  SET {Walker, Fremont, Porat, Johnson}
            
            department      accounting
            direct_reports  SET {Baker, Freeman, Jacobs}
            ⋮

对集合类型查询的输出总是包括类型构造函数,它指定集合是 SET 、MULTISET 或 LIST 。例如:在此结果中,SET 构造函数位于每个集合的元素前面。花括号({})划分集合的元素;逗号隔开集合的个别元素。