对行类型列的查询返回 ROW 类型的所有字段的数据。 字段是 ROW 类型中的组件数据类 型。例如:employee 表的 address 列包含 street、city 、state 和 zip 字段。下列查询显示如何 构造返回 address 列的所有字段的查询。 图: 查询 SELECT address FROM employee 图: 查询结果 address ROW(102 Ruby, Belmont, CA, 49932, 1000) address ROW(133 First, San Jose, CA, 85744, 4900) address ROW(152 Topaz, Willits, CA, 69445, 1000)) ⋮ 要访问列包含的个别字段,使用单个点符号表示法来投影列的个别字段。例如:假设您要 访问 employee 表的 address 列中的特定字段。以下 SELECT 语句投影 address 列 的 city 和 state 字段。 图: 查询 SELECT address.city, address.state FROM employee 图: 查询结果 city state
Belmont CA San Jose CA Willits CA ⋮ 用对已命名行类型列构造查询所用的方法来对未命名行类型列构造查询。例如:假设您想 要访问图 2中 student 表的 s_address 列的数据。 可以使用点符号表示法来查询对未命名行类 型定义的列的个别字段。以下查询显示如何对 student 表构造返回 s_address 列 的 city 和 state 字段的行的 SELECT 语句。 图: 查询 SELECT s_address.city, s_address.state FROM student 图: 查询结果 city state
Belmont CA Mount Prospect IL Greeley CO ⋮
GBase 8s SQL 指南:教程 南大通用数据技术股份有限公司 - 74 -
字段投影 不要混淆列和字段。 列只与表相关联, 并且列投影将格式为 name_1.name2 的常规点符号表 示法分别用于表和列。 字段是 ROW 类型中的组件数据类型。 使用 ROW 类型 (和将 ROW 类型指定给单个列的能力),您可以使用形式为 name_a.name_b.name_c.name_d 的单点符 号表示法来投影列的各个字段。GBase 8s 数据库服务器使用以下优先顺序规则来解释点符 号表示法: 1. table_name_a . column_name_b . field_name_c . field_name_d 2. column_name_a . field_name_b . field_name_c . field_name_d 当特定标识的意义有歧义时。数据库服务器使用优先顺序规则来确定标识指定哪个数据库 对象。考虑以下两个语句: CREATE TABLE b (c ROW(d INTEGER, e CHAR(2))) CREATE TABLE c (d INTEGER) 在下列 SELECT 语句中,表达式 c.d 引用表 c 的列 d(而不是 b 中列 c 的字段 d),原因是 表标识具有比列标识更高的优先顺序: SELECT * FROM b,c WHERE c.d = 10 为了避免引用错误的数据库对象,可为字段投影指定完全符号表示法。例如:假定您想要 引用 b 中列 c 的字段 d(而不是表 c 的列 d)。以下语句指定想要引用的对象的表、列和字 段标识: SELECT * FROM b,c WHERE b.c.d = 10 重要: 虽然优先顺序规则减少了数据库服务器误解字段投影的几率,但是建议对所有表、列 和字段标识使用唯一名称。