|
知识路径: > 数据库技术 > 数据库标准语言—SQL > SQL-99所支持的对象关系模型 > 与复杂类型有关的查询 >
|
相关知识点:3个
|
|
|
|
将一个嵌套关系转换成具有更少(或没有)的关系为值的属性的形式的过程称为解除嵌套(unnesting)。books关系有author-array和keyword-set两个是集合体的属性;同时books关系另外还有title和publisher两个不是集合体的属性。
|
|
|
|
|
from子句中的变量B被声明为以books为取值范围,变量A被声明为以书B的author-array中的作者为取值范围,同时K被声明为以书B的keyword-set中的关键字为取值范围。上图显示了books关系的一个1NF实例,下图显示了上述查询的结果形成的4NF关系。
|
|
|
|
|
将一个1NF关系转化为嵌套关系的反向过程称为嵌套(nesting)。嵌套可以用在SQL中的分组操作的一个扩展来完成。在SQL中分组的常规使用中,要对每个组(逻辑上)创建一个临时的多重集合关系,然后在这个临时关系上应用一个聚集函数。我们可以通过返回这个多重集合而不应用聚集函数的方式创建一个嵌套关系。
|
|
|
|
|
假定我们有一个如上图所示的1NF关系flat-books,下面的查询在属性keyword上对关系进行了嵌套:
|
|
|
|
|
|
在上图中flat-books关系上执行这个查询的结果如下图所示。
|
|
|
|
|
|
|
如果我们要同时对作者属性进行嵌套,而将下图中1NF表flat-books转化为上图所示的嵌套表books,我们可以使用如下查询:
|
|
|
|
|
|
另一种创建嵌套关系的方法是在select语句中使用子查询。下面的查询阐明了该方法,它与上面的查询执行了同样的任务。
|
|
|
|
系统对select子句中对外部查询中的from和where子句生成的每一个元组执行嵌套子查询。观察到外部查询中的O.title属性被用到嵌套查询中,以确保对每一本书的题目产生正确的作者和关键字集合。这种方法的优点在于可以在嵌套查询上使用orderby子句生成一个有序的结果。数组或是列表可以从嵌套查询的结果中构造出来。如果没有排序,数组和列表将不能唯一确定。
|
|
|