您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 数据结构与算法 > SQL语言之数据查询(3)
第九讲SQL语言之数据查询(3)数据库技术数据库技术四.嵌套查询在SQL语言中,一个select-from-where语句成为一个查询块。将一个查询块嵌套在另一个查询块的where子句或having短语的条件中的查询成为嵌套查询。也可以多层嵌套。数据库技术四.嵌套查询例子:Selectsnamefromstudentwheresnoin(selectsnofromscwherecno=‘2’)父查询(外层查询)、子查询(内层查询)子查询建立父查询的查找条件,“由里向外处理”。也可以在select子句中加入嵌套查询数据库技术四.嵌套查询1.带有in谓词的子查询在嵌套查询中,子查询往往是一个集合,所以in在嵌套查询中经常用到。例子1:查询与林云同一个系的学生相关信息数据库技术四.嵌套查询分步处理过程:①selectsdeptfromstudentwheresname=‘林云’返回sdept相应结果,如假设返回的结果范围为a②selectsno,sname,sdeptfromstudentwheresdeptin‘a’③合并得:selectsno,sname,sdeptfromstudentwheresdeptin(selectsdeptfromstudentwheresname=‘林云’)数据库技术四.嵌套查询本例中的查询也可以用自身连接来完成:selects1.sno,s1.sname,s1.sdeptfromstudents1,students2wheres1.sdept=s2.sdeptands2.sname=‘林云’实现同一查询的方法可以有多种方法,不同的方法的执行效率可能有差别。嵌套查询很多时候可改成连接查询。数据库技术四.嵌套查询例子2:查询选修了课程名为“数学”的学生学号和姓名①selectcnofromcoursewherecname=‘数学’②selectsnofromscwherecno③selectsno,snamefromstudentwheresno数据库技术四.嵌套查询④合并得selectsno,snamefromstudentwheresnoin(selectsnofromscwherecnoin(selectcnofromcoursewherecname=‘数学’))数据库技术四.嵌套查询同样可以用连接查询实现:selectstudent.sno,student.snamefromstudent,sc,coursewherestudent.sno=sc.snoandsc.cno=course.cnoandcourse.cname=‘数学’数据库技术四.嵌套查询2.带有比较运算符的子查询父查询与子查询之间使用比较运算符来进行连接。当用户确切知道内层查询返回的是单值时,可以用、、=、=、、!=等比较运算符。数据库技术四.嵌套查询如上例查询与林云同一个系的学生相关信息,如果确切知道没有跟林云同名的学生,即查找林云时只返回一个系的话,可以使用=。selectsno,sname,sdeptfromstudentwheresdept=(selectsdeptfromstudentwheresname=‘林云’)注意:子查询要跟在比较运算符后面数据库技术四.嵌套查询3.带有any和all谓词的子查询any、any大于(小于)子查询结果中的某个值=any、=any大于等于(小于等于)…=any等于…!=(或者)any不等于…all、all大于(小于)子查询结果中的所有值=all、=all大于等于(小于等于)…=all等于…(通常没有实际意义)!=(或者)all不等于子查询结果中的任何一个值数据库技术四.嵌套查询例子:查询其它系中比教育系所有学生年龄都小的学生姓名和年龄:selectsname,sagefromstudentwheresdept'教育系'andsageall(selectsagefromstudentwheresdept='教育系')如果要查询比教育系某一学生年龄小怎么做?数据库技术四.嵌套查询本例中也可以用集合函数来完成:Selectsname,sagefromstudentwheresdept'教育系'andsage(selectmin(sage)fromstudentwheresdept='教育系')如果是比某一学生年龄小可以使max(sage)
本文标题:SQL语言之数据查询(3)
链接地址:https://www.777doc.com/doc-3592148 .html