与复杂类型有关的查询
考试要求: 掌握     
知识路径:  > 数据库技术  > 数据库标准语言—SQL  > SQL-99所支持的对象关系模型


 
       复杂类型的SQL查询语言扩展用一个简单的例子来说明。例如,找出每本书的标题和出版社。下面的查询实现了这项任务:
       
       请注意我们使用点号“.”引用了复合属性publisher的name字段。
       路径表达式
       在SQL-99中对引用取内容使用→符号。
       在上面的查询中,“head→name”带有→符号的表达式被称为路径表达式(path expression)。由于head是一个对people表中元组的引用,上述查询中的name属性就是people表中元组的name属性。引用可以用来隐藏连接操作。在上面的例子中,如果没有使用引用,则departments的head字段就会被声明为people表的一个外码。要找出一个部门负责人的姓名和地址,我们就需要将departments与people关系显式地做一个连接。显然,使用引用可以明显地简化查询。
       以集合体为值的属性
       怎样处理以集合为值的属性。一个计算集合体值的表达式可以出现在关系名出现的任何地方,具体方法如例8.42所示。
       unnest(keyword-set)在无嵌套关系的SQL中相当于一个select-from-where的子表达式。如果我们知道一本特定的书具有三个作者,我们会这样写:
       
       现在,假定我们想得到一个关系,它包含形式为“书名,作者名”,对应每本书和书的每个作者。我们可以使用下面的查询:
       
       由于books的author-array属性是一个以集合体为值的字段,因此可以用在需要有一个关系存在的from子句中。
       嵌套与解除嵌套
       将一个嵌套关系转换成具有更少(或没有)的关系为值的属性的形式的过程称为解除嵌套(unnesting)。books关系有author-array和keyword-set两个是集合体的属性;同时books关系另外还有title和publisher两个不是集合体的属性。
       
       flat-books的一个1NF实例
       from子句中的变量B被声明为以books为取值范围,变量A被声明为以书B的author-array中的作者为取值范围,同时K被声明为以书B的keyword-set中的关键字为取值范围。上图显示了books关系的一个1NF实例,下图显示了上述查询的结果形成的4NF关系。
       
       分解关系flat-books为4NF的实例
       将一个1NF关系转化为嵌套关系的反向过程称为嵌套(nesting)。嵌套可以用在SQL中的分组操作的一个扩展来完成。在SQL中分组的常规使用中,要对每个组(逻辑上)创建一个临时的多重集合关系,然后在这个临时关系上应用一个聚集函数。我们可以通过返回这个多重集合而不应用聚集函数的方式创建一个嵌套关系。
       
       flat-books的一个1NF实例
       假定我们有一个如上图所示的1NF关系flat-books,下面的查询在属性keyword上对关系进行了嵌套:
       
       
       flat-books的一个1NF实例
       在上图中flat-books关系上执行这个查询的结果如下图所示。
       
       flat-books关系的一个部分嵌套版本
       
       非INF的书籍关系,books
       如果我们要同时对作者属性进行嵌套,而将下图中1NF表flat-books转化为上图所示的嵌套表books,我们可以使用如下查询:
       
       flat-books的一个1NF实例
       
       另一种创建嵌套关系的方法是在select语句中使用子查询。下面的查询阐明了该方法,它与上面的查询执行了同样的任务。
       
       系统对select子句中对外部查询中的from和where子句生成的每一个元组执行嵌套子查询。观察到外部查询中的O.title属性被用到嵌套查询中,以确保对每一本书的题目产生正确的作者和关键字集合。这种方法的优点在于可以在嵌套查询上使用orderby子句生成一个有序的结果。数组或是列表可以从嵌套查询的结果中构造出来。如果没有排序,数组和列表将不能唯一确定。
 

更多复习资料
请登录电脑版软考在线 www.rkpass.cn

京B2-20210865 | 京ICP备2020040059号-5
京公网安备 11010502032051号 | 营业执照
 Copyright ©2000-2025 All Rights Reserved
软考在线版权所有