4实验四复杂查询doc.docx
《4实验四复杂查询doc.docx》由会员分享,可在线阅读,更多相关《4实验四复杂查询doc.docx(6页珍藏版)》请在冰点文库上搜索。
4实验四复杂查询doc
实验四复杂查询
一、实验目的
掌握两个表以上的连接查询的应用,包括嵌套查询。
二、实验内容
(1)查询比“林红”年纪大的男学生信息。
select*fromStudent
whereSex='男'and
YEAR(Birth)-(selectYEAR(Birth)
fromStudentwhereSname='林红')<0
(2)检索所有学生的选课信息,包括学号、姓名、课号、课程名、成绩。
selectSC.Sno,Sname,Sex,Classno,Cname,Grade
fromStudents,SC,Coursec
wheres.Sno=SC.SnoandSC.cno=o
(3)查询已选课学生的学号、姓名、课程名、成绩。
selectSC.Sno,Sname,Cname,Grade
fromStudents,coursec,SC
wheres.sno=SC.snoando=SC.cno
(4)查询选修了“C语言程序设计”的学生的学号和姓名。
selectsc.Sno,Sname
fromStudents,coursec,sc
wherec.Cname='C语言程序设计'ands.Sno=sc.Snoandsc.Cno=c.Cno
(5)查询与“张虹”在同一个班级的学生学号、姓名、家庭住址。
a.用子查询
selectSno,Sname,Home_addr
fromStudent
whereClassno='051'andSname!
='张虹'
b.用连接查询
selectSno,Sname,Home_addr
fromStudent
whereClassno=(selectClassnofromStudentwhereSname='张虹')
andSname!
='张虹'
(6)查询其他班级中比“051”班所有学生年龄大的学生的学号、姓名。
selectSno,Sname
fromStudent
whereClassno<>'051'
andBirthwhereClassno='051')
(7)(选作)查询选修了全部课程的学生姓名。
本题使用除运算的方法。
由题意可得另一种语言,没有一个选了课的学生没有选course表里的课程。
那么,我们需要两个NOTEXISTS表示双重否定;另一种思路可详见书例4.52
selectSnamefromStudent
wherenotexists(
select*fromCourse
wherenotexists(
select*fromSC
whereSno=Student.sno
andcno=Co))
(8)(选作)查询至少选修了学生“20110002”选修的全部课程的学生的学号,姓名。
selectSno,SnamefromStudent
whereSnoin(
selectdistinctSno
fromSCasSC1
wherenotexists(
select*fromSCasSC2
whereSC2.Sno='20110002'
andnotexists(
select*fromSCasSC3
whereSC3.Sno=SC1.Snoand
SCo=SCo))
)
(9)检索学生的学号、姓名、学习课程名及课程成绩。
selects.Sno,Sname,Cname,Grade
fromStudents,Coursec,SC
wheres.Sno=sc.Snoandsc.Cno=c.Cno
(10)检索选修了“高数”课且成绩至少高于选修课程号为“002”课程的学生的学号、课程号、成绩,并按成绩从高到低次序排列。