《数据库关系数据库标准语言SQL》由会员分享,可在线阅读,更多相关《数据库关系数据库标准语言SQL(94页珍藏版)》请在金锄头文库上搜索。
1、中国地质大学信息工程学院数据库系统概论 An Introduction to Database System第三章 关系数据库标准语言SQL (续1)1An Introduction to Database System3.4.2 连接查询 同时涉及多个表的查询称为连接查询用来连接两个表的条件称为连接条件或连接谓词 一般格式:n. .比较运算符:=、=、. BETWEEN . AND .2An Introduction to Database System连接查询 (续)n连接字段n连接谓词中的列名称为连接字段n连接条件中的各连接字段类型必须是可比 的,但不必是相同的3An Introduct
2、ion to Database System连接操作的执行过程n嵌套循环法(NESTED-LOOP)n首先在表1中找到第一个元组,然后从头开始扫描表 2,逐一查找满足连接件的元组,找到后就将表1中 的第一个元组与该元组拼接起来,形成结果表中一 个元组。n表2全部查找完后,再找表1中第二个元组,然后再 从头开始扫描表2,逐一查找满足连接条件的元组, 找到后就将表1中的第二个元组与该元组拼接起来, 形成结果表中一个元组。n重复上述操作,直到表1中的全部元组都处理完毕 4An Introduction to Database System排序合并法(SORT-MERGE)常用于=连接n首先按连接属性
3、对表1和表2排序n对表1的第一个元组,从头开始扫描表2,顺序查 找满足连接条件的元组,找到后就将表1中的第一 个元组与该元组拼接起来,形成结果表中一个元 组。当遇到表2中第一条大于表1连接字段值的元 组时,对表2的查询不再继续5An Introduction to Database System排序合并法n找到表1的第二条元组,然后从刚才的中断点处继续顺序扫描表2,查找满足连接条件的元组,找到后就将表1中的第一个元组与该元组拼接起来,形成结果表中一个元组。直接遇到表2中大于表1连接字段值的元组时,对表2的查询不再继续n重复上述操作,直到表1或表2中的全部元组都处理完毕为止 6An Introd
4、uction to Database System连接查询 (续)SQL中连接查询的主要类型n 等值连接(含自然连接)n 非等值连接查询n 自身连接查询n 外连接查询n 复合条件连接查询7An Introduction to Database System一、等值与非等值连接查询 等值连接、自然连接、非等值连接例33 查询每个学生及其选修课程的情况。SELECT Student.*,SC.*FROM Student,SCWHERE Student.Sno = SC.Sno;8An Introduction to Database System等值连接n连接运算符为 = 的连接操作n . = .
5、n任何子句中引用表1和表2中同名属性时,都必须加表名前缀。引用唯一属性名时可以加也可以省略表名前缀。 9An Introduction to Database System等值连接假设Student表、SC表分别有下列数据: Student表 Sno SnameSsexSageSdept95001 李勇 男 20 CS95002 刘晨 女 19 IS95003 王敏 女 18 MA95004 张立 男 19 IS10An Introduction to Database System等值连接SC表 Sno CnoGrade95001 1 9295001 2 8595001 95002 9500
6、23 2388908011An Introduction to Database System等值连接例33的结果表Student.Sno Sname Ssex Sage Sdept SC.Sno Cno Grade95001 李勇 男 20 CS95001 1 92 95001 李勇 男 20CS95001 2 85 95001 李勇 男 20CS95001 3 88 95002 刘晨 女 19IS 95002 2 90 95002 刘晨 女 19IS95002 3 80 12An Introduction to Database System自然连接n等值连接的一种特殊情况,把目标列中 重
7、复的属性列去掉。 例34 对例33用自然连接完成。SELECT Student.Sno,Sname,Ssex,Sage , Sdept,Cno,GradeFROM Student,SCWHERE Student.Sno = SC.Sno;结果表中去除了 SC.Sno13An Introduction to Database System非等值连接查询连接运算符 不是 = 的连接操作.比较运算符:、=、. BETWEEN . AND . 14An Introduction to Database System二、自身连接 n一个表与其自己进行连接,称为表的自身连 接n需要给表起别名以示区别n由于
8、所有属性名都是同名属性,因此必须使用别名前缀15An Introduction to Database System自身连接(续)例35 查询每一门课的间接先修课(即先修课 的先修课)FIRST表(Course表) Cno CnameCpnoCcredit1数据库 5 4 2数学23信息系统 1 44操作系统 6 35数据结构 7 46数据处理 27PASCAL语言 6 416An Introduction to Database System自身连接(续)SECOND表(Course表) Cno CnameCpnoCcredit1数据库 5 4 2数学23信息系统 1 44操作系统 6 35
9、数据结构 7 46数据处理 27PASCAL语言 6 417An Introduction to Database System自身连接(续)SELECT FIRST.Cno,SECOND.CpnoFROM Course FIRST,Course SECONDWHERE FIRST.Cpno = SECOND.Cno;查询结果cnocpno1 73 55 618An Introduction to Database System四、外连接(Outer Join) n外连接与普通连接的区别n普通连接操作只输出满足连接条件的元组n外连接操作以指定表为连接主体,将主体表中不满足连接条件的元组一并输出
10、19An Introduction to Database System外连接(续) 例 36 查询每个学生及其选修课程的情况包 括没有选修课程的学生-用外连接操作 SELECT Student.Sno,Sname,Ssex,Sage,Sdept,Cno, GradeFROM Student,SCWHERE Student.Sno = SC.Sno(*); 外连接操作符(*)20An Introduction to Database System外连接(续) 结果: Student.Sno Sname Ssex Sage Sdept Cno Grade 95001 李勇 男 20 CS 1 9
11、295001 李勇 男 20 CS 2 8595001 李勇 男 20 CS 3 8895002 刘晨 女 19 IS 2 9095002 刘晨 女 19 IS 3 8095003 王敏 女 18 MA95004 张立 男 19 IS21An Introduction to Database System五、复合条件连接WHERE子句中含多个连接条件时,称为复合条件连接例37查询选修2号课程且成绩在90分以上的所有学生的学号、姓名SELECT Student.Sno, student.Sname FROM Student, SC WHERE Student.Sno = SC.Sno AND /
12、* 连接谓词*/SC.Cno= 2 AND SC.Grade 90; /* 其他限定条件 */22An Introduction to Database System多表连接例38 查询每个学生的学号、姓名、选修的课程名及 成绩。SELECT Student.Sno,Sname,Cname,GradeFROM Student,SC,CourseWHERE Student.Sno = SC.Sno and SC.Cno = Course.Cno;结果: Student.Sno Sname Cname Grade 95001 李勇 数据库 9295001 李勇 数学 8595001 李勇 信息系统
13、 8895002 刘晨 数学 9095002 刘晨 信息系统 80 23An Introduction to Database System3.4.3 嵌套查询n嵌套查询概述n嵌套查询分类n嵌套查询求解方法n引出子查询的谓词 24An Introduction to Database System嵌套查询(续)n嵌套查询概述n一个SELECT-FROM-WHERE语句称为一个 查询块n将一个查询块嵌套在另一个查询块的 WHERE子句或HAVING短语的条件中的查 询称为嵌套查询25An Introduction to Database System嵌套查询(续)SELECT Sname外层查询/父查询FROM StudentWHERE Sno IN(SELECT Sno 内层查询/子查 询FROM SCWHERE Cno= 2 );26An Introduction to Database System嵌套查询(续)n子查询的限制n不能使用ORDER BY子句n层层嵌套方式反映了 SQL语言的结构化n有些嵌套查询可以用连接运算替代27An Introduction to Database System一、带有IN谓词的子查询例3