文档详情

4实验四 复杂查询.doc

发布:2016-05-19约3.61千字共11页下载文档
文本预览下载声明
实验四 复杂查询 一、实验目的 掌握两个表以上的连接查询的应用,包括嵌套查询。 二、实验内容 (1)查询比“林红”年纪大的男学生信息。 select * from Student where Sex = 男 and YEAR(Birth)-(select YEAR(Birth) from Student where Sname =林红)0 (2)检索所有学生的选课信息,包括学号、姓名、课号、课程名、成绩。 select SC.Sno,Sname,Sex,Classno,Cname,Grade from Student s,SC,Course c where s.Sno=SC.Sno and SC.cno=c.cno (3)查询已选课学生的学号、姓名、课程名、成绩。 select SC.Sno,Sname,Cname,Grade from Student s,course c,SC where s.sno=SC.sno and c.cno=SC.cno (4)查询选修了“C语言程序设计”的学生的学号和姓名。 select sc.Sno,Sname from Student s,course c,sc where c.Cname=C语言程序设计 and s.Sno=sc.Sno and sc.Cno=c.Cno (5)查询与“张虹”在同一个班级的学生学号、姓名、家庭住址。 a.用子查询 select Sno,Sname,Home_addr from Student where Classno=051 and Sname!=张虹 b.用连接查询 select Sno,Sname,Home_addr from Student where Classno=(select Classno from Student where Sname=张虹) and Sname!=张虹 (6)查询其他班级中比“051”班所有学生年龄大的学生的学号、姓名。 select Sno,Sname from Student where Classno 051 and Birth all(select Birth from Student where Classno = 051) (7)(选作)查询选修了全部课程的学生姓名。 本题使用除运算的方法。 由题意可得另一种语言,没有一个选了课的学生没有选course表里的课程。那么,我们需要两个NOT EXISTS表示双重否定;另一种思路可详见书例4.52 select Sname from Student where not exists( select * from Course where not exists( select * from SC where Sno=Student.sno and cno=Course.cno)) (8)(选作)查询至少选修了学生选修的全部课程的学生的学号,姓名。 select Sno,Sname from Student where Sno in( select distinct Sno from SC as SC1 where not exists( select * from SC as SC2 where SC2.Sno and not exists( select * from SC as SC3 where SC3.Sno=SC1.Sno and SC3.cno=SC2.cno)) ) (9)检索学生的学号、姓名、学习课程名及课程成绩。 select s.Sno,Sname,Cname,Grade from Student s,Course c,SC where s.Sno=sc.Sno and sc.Cno=c.Cno (10)检索选修了“高数”课且成绩至少高于选修课程号为“002”课程的学生的学号、课程号、成绩,并按成绩从高到低次序排列。 由题意得,选修了高数课的学生的成绩要高于选修002课号课程的学生的成绩 select distinct Sno,Cno,Grade from SC where Cno in( select Cno from Course where Cname=高数) and Grade(select MAX(Grade) from SC where cno=002) order by Grade desc (11)检索选修3门以上课程的学生的学号、总成绩(不统计不及格的课程),并要求按总成绩的降序排列出来。 select Sno
显示全部
相似文档