文档详情

数据库上课第六讲SQL语言_3(连接与聚合)剖析.ppt

发布:2017-06-04约1.1万字共51页下载文档
文本预览下载声明
作业: 1、练习课本上本章已学部分的例子; 要求:看懂,理解其执行过程。 2、建立图书管理数据库BookDB和相关表(p131) 要求:写出SQL文件,后缀.sql; 属性名要有注释; 推荐文本编辑器notepad++。 * * 1.1.2 自然连接 自然连接的方法是在等值连接的基础上消除重复列 [例3.30] 实现成绩表Score和课程表Course的自然连接。 SELECT studentNo, a.courseNo, score, courseName, creditHour, courseHour, priorCourse FROM Score a, Course b WHERE a.courseNo=b.courseNo 课程编号在两个关系中同时出现,且相同,只需输出一次,即在SELECT子句中仅需出现1次,因此使用a.courseNo,也可以使用b.courseNo。 * * 1.1.3 非等值连接 非等值连接使用的比较少。 练习:以例2.16(p61)为基础。写出SQL。 * * 1.2 自表连接 若某个表与自己进行连接,称为自表连接 主要用途是检索一张表内部的匹配情况 * * 示例 例:查找每门课的间接先修课程(即先修课程的先修课程)。 分析:在Course表中只有先修课程。 把两个Course表进行连接,即自表连接。 SELECT first.courseName,Sec.priorCourse FROM Course first, Course Sec WHERE first.priorCourse = Sec.courseNo * * Course first Course Sec [例3.31] 查找同时选修了编号为“001”和“002”课程的同学学号、姓名、课程号和相应成绩,并按学号排序输出。 From表 : 学生姓名?Student (取别名为a) 两个成绩表,分别起别名b和c(Score b, Score c) b表用于查询选修了编号为“001”课程的同学 c表用于查询选修了编号为“002”课程的同学 * * Where 选择条件: b.courseNo=001 AND c.courseNo=002 Where 连接条件: 成绩表b与成绩表c在学号上做等值连接(自表连接) b.studentNo = c.studentNo 学生表与成绩表b (或成绩表c)在学号上做等值连接。 a.studentNo = b.studentNo * * 综上 SELECT a.studentNo, studentName, b.courseNo, b.score, c.courseNo, c.score FROM Student a, Score b, Score c WHERE b.courseNo=001 AND c.courseNo=002 AND a.studentNo=b.studentNo AND b.studentNo=c.studentNo ORDER BY a.studentNo 注意:两个参与自表连接的成绩表Score,必须定义元组变量加以区分 * * 自表连接 [例3.32] 在学生表Student中查找与“李宏冰”同学在同一个班的同学姓名、班级编号和出生日期。 分析 Select属性:姓名、班级编号和出生日期 From表:所需属性都在student表,涉及其内部情况,需自表连接。 Where连接条件:“同一个班”?班级号相同 Where选择条件:姓名=‘李宏冰’ * * 查询语句: SELECT a.studentName, a.classNo, a.birthday FROM Student a, Student b WHERE b.studentName=李宏冰 AND a.classNo=b.classNo * * +-------------+---------+---------------------+ | studentName | classNo | birthday | +-------------+---------+---------------------+ | 王红 | CP0802 | 0000-00-00 00:00:00 | | 李志强 | CP0802 | 0000-00-00 00:00:00 | | 黄勇 | CP0802 | 0000
显示全部
相似文档