欢迎来到天天文库
浏览记录
ID:22570773
大小:689.00 KB
页数:11页
时间:2018-10-30
《4实验四复杂查询》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、实验四复杂查询一、实验目的掌握两个表以上的连接查询的应用,包括嵌套查询。二、实验内容(1)查询比“林红”年纪大的男学生信息。select*fromStudentwhereSex='男'andYEAR(Birth)-(selectYEAR(Birth)fromStudentwhereSname='林红')<0(2)检索所有学生的选课信息,包括学号、姓名、课号、课程名、成绩。selectSC.Sno,Sname,Sex,Classno,Cname,GradefromStudents,SC,Coursecwheres.Sno=SC.SnoandSC.cno=c.cno
2、(3)查询已选课学生的学号、姓名、课程名、成绩。selectSC.Sno,Sname,Cname,GradefromStudents,coursec,SCwheres.sno=SC.snoandc.cno=SC.cno(4)查询选修了“C语言程序设计”的学生的学号和姓名。selectsc.Sno,SnamefromStudents,coursec,scwherec.Cname='C语言程序设计'ands.Sno=sc.Snoandsc.Cno=c.Cno(5)查询与“张虹”在同一个班级的学生学号、姓名、家庭住址。a.用子查询selectSno,Sname,Hom
3、e_addrfromStudentwhereClassno='051'andSname!='张虹'b.用连接查询selectSno,Sname,Home_addrfromStudentwhereClassno=(selectClassnofromStudentwhereSname='张虹')andSname!='张虹'(6)查询其他班级中比“051”班所有学生年龄大的学生的学号、姓名。selectSno,SnamefromStudentwhereClassno<>'051'andBirth4、no='051')(7)(选作)查询选修了全部课程的学生姓名。本题使用除运算的方法。由题意可得另一种语言,没有一个选了课的学生没有选course表里的课程。那么,我们需要两个NOTEXISTS表示双重否定;另一种思路可详见书例4.52selectSnamefromStudentwherenotexists(select*fromCoursewherenotexists(select*fromSCwhereSno=Student.snoandcno=Course.cno))(8)(选作)查询至少选修了学生“20110002”选修的全部课程的学生的学号,姓名。sel5、ectSno,SnamefromStudentwhereSnoin(selectdistinctSnofromSCasSC1wherenotexists(select*fromSCasSC2whereSC2.Sno='20110002'andnotexists(select*fromSCasSC3whereSC3.Sno=SC1.SnoandSC3.cno=SC2.cno)))(9)检索学生的学号、姓名、学习课程名及课程成绩。selects.Sno,Sname,Cname,GradefromStudents,Coursec,SCwheres.Sno=sc.Sno6、andsc.Cno=c.Cno(10)检索选修了“高数”课且成绩至少高于选修课程号为“002”课程的学生的学号、课程号、成绩,并按成绩从高到低次序排列。由题意得,选修了高数课的学生的成绩要高于选修002课号课程的学生的成绩selectdistinctSno,Cno,GradefromSCwhereCnoin(selectCnofromCoursewhereCname='高数')andGrade>(selectMAX(Grade)fromSCwherecno='002')orderbyGradedesc(11)检索选修3门以上课程的学生的学号、总成绩(不统计不及格7、的课程),并要求按总成绩的降序排列出来。selectSno,sum(grade)as总成绩fromSCwhereSnoin(selectSnofromSCgroupbySnohavingcount(*)>3)andGrade>=60groupbySnoorderby总成绩desc(12)检索多于3名学生选修的并以3结尾的课程号的平均成绩。selectavg(Grade)as平均成绩fromSCwhereCnolike'%3'groupbyCnohavingcount(Cno)>3(13)检索最高分与最低分之差大于5分的学生的学号、姓名、最高分、最底分。selec8、tdistinctSC.
4、no='051')(7)(选作)查询选修了全部课程的学生姓名。本题使用除运算的方法。由题意可得另一种语言,没有一个选了课的学生没有选course表里的课程。那么,我们需要两个NOTEXISTS表示双重否定;另一种思路可详见书例4.52selectSnamefromStudentwherenotexists(select*fromCoursewherenotexists(select*fromSCwhereSno=Student.snoandcno=Course.cno))(8)(选作)查询至少选修了学生“20110002”选修的全部课程的学生的学号,姓名。sel
5、ectSno,SnamefromStudentwhereSnoin(selectdistinctSnofromSCasSC1wherenotexists(select*fromSCasSC2whereSC2.Sno='20110002'andnotexists(select*fromSCasSC3whereSC3.Sno=SC1.SnoandSC3.cno=SC2.cno)))(9)检索学生的学号、姓名、学习课程名及课程成绩。selects.Sno,Sname,Cname,GradefromStudents,Coursec,SCwheres.Sno=sc.Sno
6、andsc.Cno=c.Cno(10)检索选修了“高数”课且成绩至少高于选修课程号为“002”课程的学生的学号、课程号、成绩,并按成绩从高到低次序排列。由题意得,选修了高数课的学生的成绩要高于选修002课号课程的学生的成绩selectdistinctSno,Cno,GradefromSCwhereCnoin(selectCnofromCoursewhereCname='高数')andGrade>(selectMAX(Grade)fromSCwherecno='002')orderbyGradedesc(11)检索选修3门以上课程的学生的学号、总成绩(不统计不及格
7、的课程),并要求按总成绩的降序排列出来。selectSno,sum(grade)as总成绩fromSCwhereSnoin(selectSnofromSCgroupbySnohavingcount(*)>3)andGrade>=60groupbySnoorderby总成绩desc(12)检索多于3名学生选修的并以3结尾的课程号的平均成绩。selectavg(Grade)as平均成绩fromSCwhereCnolike'%3'groupbyCnohavingcount(Cno)>3(13)检索最高分与最低分之差大于5分的学生的学号、姓名、最高分、最底分。selec
8、tdistinctSC.
此文档下载收益归作者所有