首页 > 知识点
       与复杂类型有关的查询
知识路径:  > 数据库技术  > 数据库标准语言—SQL  > SQL-99所支持的对象关系模型
考试要求:掌握      相关知识点:16个      
        复杂类型的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子句生成一个有序的结果。数组或是列表可以从嵌套查询的结果中构造出来。如果没有排序,数组和列表将不能唯一确定。
 
 相关知识点:
 
软考在线指南
优惠劵及余额
在线支付
修改密码
下载及使用
购买流程
取消订单
联系我们
关于我们
联系我们
商务合作
旗下网站群
高级资格科目
信息系统项目管理师 系统分析师
系统架构设计师 网络规划设计师
系统规划与管理师
初级资格科目
程序员 网络管理员
信息处理技术员 信息系统运行管理员
中级资格科目
系统集成项目管理工程师 网络工程师
软件设计师 信息系统监理师
信息系统管理工程师 数据库系统工程师
多媒体应用设计师 软件评测师
嵌入式系统设计师 电子商务设计师
信息安全工程师
 

本网站所有产品设计(包括造型,颜色,图案,观感,文字,产品,内容),功能及其展示形式,均已受版权或产权保护。
任何公司及个人不得以任何方式复制部分或全部,违者将依法追究责任,特此声明。
本站部分内容来自互联网或由会员上传,版权归原作者所有。如有问题,请及时联系我们。


工作时间:9:00-20:00

客服

QQ 486577830

点击这里给我发消息

商务合作

QQ 486577830

点击这里给我发消息

客服邮箱service@rkpass.cn


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