资源描述:
《关系数据库标准语言SQL(续)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、本章内容SQL概述数据定义数据查询数据更新视图数据控制3.3数据查询3.3.1单表查询3.3.2连接查询3.3.3嵌套查询3.3.4集合查询3.3.2连接查询等值与非等值连接查询自身连接外连接复合条件连接查询涉及两个或以上的表,必须将多个表进行连接。等值与非等值连接查询按一定条件把多个表连接起来,条件的形式为:[<表名1>.]<列名1><比较运算符>[<表名2>.]<列名2>比较运算符有:=、>、<、>=、<=、!=如果属性名在参见连接的各表中是唯一的,则可以省略表名前缀。自然连接:最常用的等值连接。多表查询——等值连接例:列出
2、每个学生及其选修课程的情况学生情况←student选修课程情况←SCSelectstudent.*,SC.*Fromstudent,SCWherestudent.sno=SC.sno多表查询——自然连接例:自然连接Student和SC表。SelectStudent.sno,sname,ssex,sage,sdept,cno,gradeFromStudent,SCWhereStudent.sno=SC.sno;例:列出选修C01课程的学生的名册selectsno,snamefromstudent,SCwherestudent.sn
3、o=SC.snoandcno=‘C01’;多表查询——自身连接例:查询每门课的间接先修课(先修课的先修课)。把Course表想象成完全相同的两张表,取别名为:FIRST、SECOND。连接操作不仅可以在两个表之间进行,也可以是一个表与其自己进行连接,称为自身连接。cnocnamecpnocred1数据库542数学543信息系统544操作系统545数据结构546数据处理547C语言54cnocnamecpnocred1数据库542数学543信息系统544操作系统545数据结构546数据处理547C语言54FIRST表(Course
4、表)SEOND表(Course表)连接条件为:FIRST.cpno=SECOND.cnoSelectfirst.cno,second.cpnoFromcoursefirst,coursesecondWherefirst.cpno=second.cno连接条件为:FIRST.cpno=SECOND.cno为course表命别名,first、second多表查询——自身连接例:列出年龄比95001大的学生的学号、姓名Selects1.sno,s1.snameFromstudents1,students2Wheres2.sno=‘95
5、001’ands1.sage>s2.sage;(自身连接查询)selectsno,snamefromstudentwheresage>(selectsagefromstudentwheresno=‘95001’)(嵌套查询)多表查询——外连接不匹配连接,含有NULL信息的处理例:列出学生及其选课情况主表,完全从表,不完全所有的学生情况及他们的选课情况(含未选课)主要用于主表-从表之间信息短缺的处理不同的数据库产品有不同的方言,甚至不支持多表查询——外连接例:列出学生及其选课情况所有的学生情况及他们的选课情况(含未选课)Selec
6、tstudent.*,cno,gradeFromstudentleftouterjoinSCOnstudent.sno=sc.snoSelectstudent.*,cno,gradeFromstudent,scWherestudent.sno=sc.sno(*)有些数据库用+代替*。Oracle等数据库支持这种形式外连接。outer可以省略。SQLSever、access等数据库支持这种形式外连接。多表查询——复合条件查询查询选修了数据库课程且成绩在80分以上的学生学号和姓名。Selectstudent.sno,snameFro
7、mstudent,sc,courseWherestudent.sno=sc.snoandcourse.cno=sc.cnoandcourse.cnamelike‘%数据库%’andsc.grade>=80;嵌套查询查询块一个Select-From-Where语句。嵌套查询(SubQuery)将一个查询块嵌套在另一个查询块的Where子句或Having子句的条件中。嵌套查询——一个简单例子找出与95001同岁的学生学号及姓名95001的年龄?SelectsageFromstudentWheresno=‘95001’与上述年龄相等的
8、学生?Selectsno,snameFromstudentWheresage=(SelectsageFromstudentwheresno=‘95001’)嵌套查询带有IN谓词的子查询带有比较运算符的子查询带有ANY或ALL谓词的子查询带有EXISTS谓词的子查