欢迎来到天天文库
浏览记录
ID:48756438
大小:1.02 MB
页数:41页
时间:2020-01-22
《第三章_SQL(4)数据查询-嵌套查询.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、数据库系统概论第三章关系数据库标准语言SQL主要内容3.1SQL概述3.2学生-课程数据库3.3数据定义3.4数据查询3.5数据更新3.6视图3.4数据查询语句格式SELECT[ALL
2、DISTINCT]<目标列表达式>[,<目标列表达式>]…FROM<表名或视图名>[,<表名或视图名>]…[WHERE<条件表达式>][GROUPBY<列名1>[HAVING<条件表达式>]][ORDERBY<列名2>[ASC
3、DESC]];分类:单表查询连接查询嵌套查询集合查询3.4数据查询3.4.3嵌套查询嵌套查询概述一个SELECT-FROM-
4、WHERE语句称为一个查询块将一个查询块嵌套在另一个查询块的WHERE子句或HAVING短语的条件中的查询称为嵌套查询引例SELECTSname外层查询/父查询FROMStudentWHERESnoIN(SELECTSno内层查询/子查询FROMSCWHERECno='2');子查询的限制不能使用ORDERBY子句层层嵌套方式反映了SQL语言的结构化有些嵌套查询可以用连接运算替代嵌套查询分类不相关子查询子查询的查询条件不依赖于父查询相关子查询子查询的查询条件依赖于父查询引出子查询的谓词带有IN谓词的子查询带有比较运算符的子查询带有A
5、NY或ALL谓词的子查询带有EXISTS谓词的子查询一、带有IN谓词的子查询①确定“刘晨”所在系名SELECTSdeptFROMStudentWHERESname='刘晨';结果为[例39]查询与“刘晨”在同一个系学习的学生。此查询要求可以分步来完成②查找所有在CS系学习的学生。SELECTSno,Sname,SdeptFROMStudentWHERESdeptin('CS');结果为:构造嵌套查询将第一步查询嵌入到第二步查询的条件中SELECTSno,Sname,SdeptFROMStudentWHERESdeptIN(SELEC
6、TSdeptFROMStudentWHERESname='刘晨');此查询为不相关子查询。DBMS求解该查询:由里向外逐层处理。即每个子查询在上一级查询处理之前求解,子查询的结果用于建立其父查询的查找条件。查询与“刘晨”在同一个系学习的学生。用自身连接实现本查询:SELECTS1.Sno,S1.Sname,S1.SdeptFROMStudentS1,StudentS2WHERES1.Sdept=S2.SdeptANDS2.Sname='刘晨';SELECTSno,Sname③最后在Student关系中FROMStudent取出Sno
7、和SnameWHERESnoIN(SELECTSno②然后在SC关系中找出选FROMSC修了3号课程的学生学号WHERECnoIN(SELECTCno①首先在Course关系中找出“信FROMCourse息系统”的课程号,结果为3号WHERECname=‘信息系统’));[例40]查询选修了课程名为“信息系统”的学生学号和姓名用连接查询SELECTStudent.Sno,SnameFROMStudent,SC,CourseWHEREStudent.Sno=SC.SnoANDSC.Cno=Course.CnoANDCourse.Cna
8、me='信息系统';二、带有比较运算符的子查询当理论上内层查询返回单值时,可用比较运算符(>,<,=,>=,<=,!=或<>)。与ANY或ALL谓词配合使用例:假设一个学生只可能在一个系学习,并且必须属于一个系,则在[例39]可以用=代替IN:SELECTSno,Sname,SdeptFROMStudentWHERESdept=(SELECTSdeptFROMStudentWHERESname='刘晨');子查询一定要跟在比较符之后错误的例子:SELECTSno,Sname,SdeptFROMStudentWHERE(SELECTS
9、deptFROMStudentWHERESname=‘刘晨’)=Sdept;(SQLServer2005支持)三、带有ANY(SOME)或ALL谓词的子查询谓词语义ANY/SOME:任意一个值ALL:所有值需要配合使用比较运算符>ANY大于子查询结果中的某个值>ALL大于子查询结果中的所有值=ANY大于等于子查询结果中的某个值>=ALL大于等于子查询结果中的所有值<=ANY小于等于子查询结果中的某个值<=ALL小于等于子查询结果中的所有值=ANY等于子查询结果中的某个
10、值=ALL等于子查询结果中的所有值(通常没有实际意义)!=(或<>)ANY不等于子查询结果中的某个值(通常没有实际意义)!=(或<>)ALL不等于子查询结果中的任何一个值[例42]查询其他系中比计算机系任意一个(其中某一个)学生年龄小
此文档下载收益归作者所有