1、 外连接 复合条件连接。 多表连接。(3) 嵌套查询 通过实验验证对子查询的两个限制条件。 体会相关子查询和不相关子查询的不同。 考察四类谓词的用法,包括:第一类,IN、NOT IN;第二类,带有比较运算符的子查询;第三类,SOME、ANY或ALL谓词的子查询,查询最大值和最小值;第四类,带有EXISTS谓词的子查询,实现“所有”等情况(如王宏的“所有”课程,“所有”女生选修的课程)(4) 集合运算 使用保留字UNION进行集合或运算。 采用逻辑运算符AND或OR来实现集合交和减运算。2.3 实验步骤以University_Mis数据库为例,该数据库中有四张如实验1,其中Score是每门课的考
2、试成绩,Scredit是学生所有考试合格课程所获得的积分总数,Ccredit每门课程的学分数。在数据库中,存在这样的联系:学生可以选择课程,一个课程对应一个教师。在表Reports中保存学生的选课记录和考试成绩。(1) 查询性别为“男”的所有学生的名称并按学号升序排列。 实现代码: select Snamefrom Students_lswhere Ssex=男order by Sno asc查询结果:(2) 查询学生的选课成绩合格的课程成绩,并把成绩换算为积分。积分的计算公式为:1+(考试成绩-60)*0.1*Ccredit。考试成绩=60 否则=0实现代码:SELECT Sno,1*Ccr
3、edit+(Score-60)*0.1*CcreditFROM Reports_ls,Courses_lsWHERE Score=60 AND Reports_ls.Cno=Courses_ls.CnoUNIONSELECT Sno,0WHERE Score=3 )(10) 查询编号S26的学生所选的全部课程的课程名和成绩。 实现代码: SELECT Cname,ScoreWHERE Reports_ls.Sno=S26AND Reports_ls.Cno=Courses_ls.Cno AND Cname IN(SELECT CnameWHERE Cno IN(SELECT Cno )(11)
4、 查询所有选了“数据库原理及其应用”课程的学生编号和姓名。.SELECT DISTINCT Sno,SnameFROM Courses_ls,Students_lsWHERE Cname=数据库原理及其应用(12) 求出选择了同一个课程的学生对。SELECT Cno,Cname,Sno,SnameWHERE Sno IN(SELECT SnoWHERE Cno IN(SELECT CnoFROM Courses_ls)ORDER BY Cno ASC(13) 求出至少被两名学生选修的课程编号。 SELECT Cno,CnameGROUP BY Cno HAVING(COUNT(Cno)=2)(
5、14) 查询选修了编号S26的学生所选的某个课程的学生编号。 SELECT Sno,CnameFROM Students_ls,Courses_lsWHERE Cname IN(WHERE Sno=)(15) 查询学生的基本信息及选修课程编号和成绩。SELECT Students_ls.Sno,Sname,Semail,Scredit,Ssex,Courses_ls.Cno,Cname,ScoreFROM Students_ls,Courses_ls,Reports_lsWHERE Students_ls.Sno=Reports_ls.Sno AND Courses_ls.Cno=Report
6、s_ls.Cno(16) 查询学号S52的学生的姓名和选修的课程名称及成绩。SELECT DISTINCT Sname,Cname,ScoreWHERE Students_ls.Sno= AND Courses_ls.Cno=Reports_ls.Cno AND Reports_ls.Sno= AND Cname IN(17) 查询和学号S52的学生同性别的所有学生资料。 SELECT Students_ls.*WHERE Ssex IN(SELECT SsexS52)(18) 查询所有选课的学生的详细信息。FROM Reports_ls)(19) 查询没有学生选的课程的编号和名称。SELEC
7、T Cno,CnameWHERE Cno NOT IN(20) 查询选修了课程名为C+的学生学号和姓名。SELECT Students_ls.Sno,Sname,CnameFROM Students_ls,Reports_ls,Courses_lsWHERE Students_ls.Sno=Reports_ls.Sno AND Courses_ls.Cno=Reports_ls.Cno AND Cname IN(C+(21) 找出选修课程UML或者课程C+的学生学号和姓名。 OR Cname=UML(22) 找出和课程UML或课程C+的学分一样课程名称。WHERE Ccredit IN(SEL
8、ECT Ccredit(23) 查询所有选修编号C01的课程的学生的姓名。 SELECT Sno,Sname,CnameWHERE Reports_ls.Cno=Courses_ls.Cno AND Cno IN(24) 查询选修了所有课程的学生姓名。GROUP BY Sno HAVING COUNT(Cno)=7)(25) 利用集合查询方式,查询选修课程C+或选择课程JAVA的学生的编号、姓名和积分。SELECT Students_ls.Sno,Sname,1*Ccredit+(Score-60)*0.1*Ccredit,CnameFROM Reports_ls,Courses_ls,Stu
9、dents_ls=60 AND Reports_ls.Cno=Courses_ls.Cno AND Students_ls.Sno=Reports_ls.Sno AND Students_ls.Sno IN(SELECT Students_ls.SnoJAVASELECT Students_ls.Sno,Sname,0,CnameWHERE (Score60 OR Score=null) AND Reports_ls.Cno=Courses_ls.Cno AND Students_ls.Sno=Reports_ls.Sno AND Students_ls.Sno IN(26) 实现集合交运算,
10、查询既选修课程C+又选修课程JAVA的学生的编号、姓名和积分。60 AND Students_ls.Sno=Reports_ls.Sno AND Reports_ls.Cno=Courses_ls.Cno AND EXISTS(SELECT *WHERE Cno=C01 AND Reports_ls.Sno=Students_ls.Sno AND EXISTS(C03 AND Reports_ls.Sno=Students_ls.Sno)=60 OR Score=NULL) AND Students_ls.Sno=Reports_ls.Sno AND Reports_ls.Cno=Courses_ls.Cno AND EXISTS(27) 实现集合减运算,查询选修课程C+而没有选修课程JAVA的学生的编号。 SELECT Students_ls.Sno,Sname,1*Ccredit+(Score-60)*0.1*Ccredit,Cname AND Reports_ls.Sno=Students_ls.Sno AND NOT EXISTS(
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1