前者可以称为子查询.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
前者可以称为子查询

嵌套查询就是把一个SELECT-FROM-WHERE查询语句嵌套在另一个SELECT-FROM-WHERE查询语句中,前者可以称为子查询,也叫内查询,后者相应地称为外查询。 SQL对嵌套查询的处理方法是从内层向外层处理,即先处理最内层的子查询,然后把查询的结果用于其外查询的查询条件,再层层向外求解,最后得出查询结果。 4.4.1 产生单值的子查询 SELECT-FROM-WHERE查询语句的结果关系中可以有多个元组。 可以从键码的信息推断出对某个属性只生成单一的值。这样,就可以把查询结果当成一个普通的常量来看待,用在其外查询的选择条件中。 查询所有跟学号为9900011的学生同名的其他学生的学号。 SELECT StudentNo FROM Student WHERE StudentNo9900011 AND StudentName = ( SELECT StudentName FROM Student WHERE StudentNo=9900011 ); 4.4.2 涉及到关系的选择条件 如下运算符作用于R生成布尔值结果 1.EXISTS: 当且仅当R非空时,条件EXISTS R为真。 2.IN:当且仅当s和R中的某个值相等时,s IN R为真。 当且仅当s和R中的任何一个值都不相等时,s NOT IN R为真。 3.ALL,当且仅当s与一元关系R中的每个值都满足θ关系时,sθALL R为真; θ是6个比较运算符(=、、、、=和=)之一。 4.ANY,当且仅当 s与一元关系R中的至少一个值满足θ关 系时,sθANY R为真。 EXISTS、ALL和ANY运算符都可以通过在整个表达式前面加上NOT来求反,就像其他布尔值的表达式一样。 当且仅当R为空时,NOT EXISTS R为真;其他可以依此类推。 s=ALL R与NOT sANY R含义相同。 找出平均成绩最好的学生的学号。 SELECT StudentNo FROM StudentCourse GROUP BY StudentNo HAVING AVG(Score)=ALL (SELECT AVG(Score) FROM StudentCourse GROUP BY StudentNo); 4.4.3 涉及到元组的选择条件 如果元组 t和关系R具有相同数量的分量,那么4.4.2节中列出的运算符作用于t和R就有意义,例如t IN R或者t=ANY R。 将元组t和关系R中的元组进行比较时,前提是有一个标准的属性顺序。 查询选修了“程序设计”课的学生名单: SELECT StudentName FROM Student WHERE StudentNo IN ( SELECT StudentNo FROM StudentCourse WHERE CourseNo IN ( SELECT CourseNo FROM Course WHERE CourseName=‘程序设计’)); 很多嵌套查询都可改成单一的SELECT-FROM-WHERE查询,可以将主查询和子查询中提到的每个关系置于FROM子句中,运算符IN用WHERE子句中的等式代替。 4.4.4 相关子查询 简单的子查询是在整个嵌套查询过程中只求一次值,并将查询结果用于其外查询。复杂的子查询是在整个过程中多次求值,每次对子查询中来自子查询外部元组变量的某一项赋一个值。相关子查询,是与其上层查询相关的子查询。 查询选修课程号123的课程的学生姓名 SELECT StudentName FROM Student WHERE EXISTS (SELECT * FROM StudentCourse WHERE StudentNo=Student.StudentNo AND CourseNo=123 ); 在学生关系中找出所有重名学生的姓名。 SELECT StudentName FROM Student AS S1 WHERE StudentNoANY ( SELECT StudentNo FROM Student WHERE StudentName=S1.StudentName ); 对于相关子查询来说,外层关系有多少个元组,就要做多少次子查询。而对于非相关子查询,则子查询只做一次,随后对外层关系的每个元组所作的处理均以此为共同的基础。 关系代数中的关系是严格的集

文档评论(0)

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

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

1亿VIP精品文档

相关文档