数据库上课第七讲SQL语言_4(复杂查询)技术总结.ppt

数据库上课第七讲SQL语言_4(复杂查询)技术总结.ppt

  1. 1、本文档共48页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
主讲: 顾 曦 电话Email:guxi@ ;主要内容;;1.0 概念;具体表现在如下几个方面: 元素与集合间的属于关系 集合之间的包含和相等关系 集合的存在关系 元素与集合元素之间的比较关系 在子查询中,不允许使用ORDER BY子句,该子句仅用于最后的输出结果排序 嵌套查询分为相关子查询和非相关子查询 非相关子查询:子查询的结果不依赖于上层查询 相关子查询:当上层查询的元组发生变化时,其子查询必须重新执行 ;嵌套查询求解方法;嵌套查询求解方法(续);1.1 使用IN的子查询;该查询属于非相关子查询,执行过程如图3-23。;其查询过程为: (1) 从Score表中查询出学生的学号studentNo,构成一个中间结果关系r; (2) 从Student表中取出第一个元组t; (3) 如果元组t的studentNo属性的值包含在中间结果关系r中(即t.studentNo∈r),则将元组t的studentName属性的值作为最终查询???果关系的一个元组;否则丢弃元组t; (4) 如果Student表中还有元组,则取Student表的下一个元组t,并转第(3)步;否则转第(5)步; (5) 将最终结果关系显示出来;在本例中,WHERE子句用于检测元素与集合间的属于关系 其中Student.studentNo为元素,IN为“属于” 嵌套语句“SELECT Score.studentNo FROM Score”的查询结果为选修过课程的所有学生的学号集合 该嵌套SELECT语句称为子查询 ;[例3.38] ;WHERE子句中的IN可以实现多重嵌套,该查询的执行过程可以通过下图来表示;使用IN的非相关子查询的查询过程归纳如下: 1、首先执行最底层的子查询块,将该子查询块的结果作为中间关系; 2、执行上一层(即外一层)查询块,对于得到的每个元组,判断该元组是否在它的子查询结果中: 如果在,取出该元组中的相关属性作为最终输出结果(或该查询块的查询结果中间关系)的一个元组 否则舍弃该元组 3、如果已经执行完最上层查询块,则将最终结果作为一个新关系输出;否则返回第(2)步重复执行;1.2 使用比较运算符的子查询 ;[例3.41] ;[例3.42] ;;ANY(或SOME),ALL谓词与聚集函数、IN谓词的等价转换关系;1.3 使用存在量词EXISTS的子查询;[例3.43] ;本查询涉及Student、Score和Course三个关系,属于相关子查询,查询过程如下: (1) 首先取Student表的第一个元组x,并取其学号x.studentNo; (2) 执行子查询,该子查询对表Score和Course进行连接,并选择其学号为x.studentNo,其课程名为“计算机原理”的元组; (3) 如果子查询中可以得到结果(即存在元组),则将Student表中元组x的学生姓名和所在班级编号组成一个新元组放在结果集合中;否则(即不存在元组),直接丢弃元组x; (4) 如果Student表中还有元组,则取Student表的下一个元组x,并取其学号x.studentNo,转第(2)步;否则转第(5)步; (5) 将结果集合中的元组作为一个新关系输出 子查询的目标列通常是* 存在量词EXISTS只判断其后的子查询的结果集合中是否存在元素,无列名;[例3.44] 查询选修了所有课程的学生姓名。;;相关子查询在SQL中属于复杂的查询,其子查询的查询条件依赖于外层查询的元组值 当外层查询的元组值发生变化时,其子查询要重新依据新的条件进行查询 使用EXISTS的相关子查询处理过程是: (1) 首先取外层查询的第一个元组; (2) 依据该元组的值,执行子查询; (3) 如果子查询的结果非空(EXISTS量词返回真值),将外层查询的该元组放入到结果集中;否则(EXISTS量词返回假值),舍弃外层查询的该元组; (4) 取外层查询的下一个元组,返回第(2)步重复上述过程,直到外层查询所有的元组处理完毕; (5) 将结果集合中的元组作为一个新关系输出;带有EXISTS谓词的子查询总结; 3、不同形式的查询间的替换 一些带EXISTS或NOT EXISTS谓词的子查询不能被其他形式的子查询等价替换 所有带IN谓词、比较运算符、ANY和ALL谓词的子查询都能用带EXISTS谓词的子查询等价替换 4、用双重否定 NOT EXISTS +NOT EXISTS实现全称量词 ;例:查询所有选修了1号课程的学生姓名;;;SELECT共有6个子句,其中SELECT和FROM是必须的,其它是可选项,必须严格按照如下顺序排列 SELECT [ALL | DISTINCT] 目标列表达式 [AS] [别名]

您可能关注的文档

文档评论(0)

1112111 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档