1、数据库的嵌套查询实验报告实验三:数据库的嵌套查询实验实验目的:加深对嵌套查询语句的理解。实验内容:使用IN、比较符、ANY或ALL和EXISTS操作符进行嵌套查询操作。实验步骤:一. 使用带IN谓词的子查询1. 查询与刘晨在同一个系学习的学生的信息:比较select * from student where sdept in (select sdept from student where sname=刘晨)与: select * from student where sdept = (select sdept from student where sname=刘晨) 的异同比较: selec
2、t * from student where sdept = (select sdept from student where sname=刘晨) and sname 刘晨与: select S1.* from student S1, student S2 where S1.sdept=S2.sdept and S2.sname=刘晨的异同2. 查询选修了课程名为信息系统 的学生的学号和姓名:比较select sno, sname from student where sno in(select sno from sc where cno in (select cno from course
3、where cname=信息系统)与: select sno, sname from student where sno in(select sno from sc, course where o=o and cname=信息系统) 3. 查询选修了课程1和课程2的学生的学号:select sno from student where sno in (select sno from sc where cno=1)and sno in (select sno from sc where cno=2)比较: 查询选修了课程1或课程2的学生的sno:select sno from sc where
4、cno=1 or cno=2比较连接查询: select A.sno from sc A, sc B where A.sno=B.sno and A.cno=1 and B.cno=2 二. 使用带比较运算的子查询4. 查询比刘晨年龄小的所有学生的信息:select * from student where sage (select sage from student where sname=刘晨)三. 使用带Any, All谓词的子查询5. 查询其他系中比信息系(IS)某一学生年龄小的学生姓名和年龄;select sname, sage from student where sage Any
5、 (select sage from student where sdept=IS) and sdeptIS6. 查询其他系中比信息系(IS)学生年龄都小的学生姓名和年龄:select sname, sage from student where sage ALL(select sage from student where sdept=IS) and sdeptIS7. 查询与计算机系(CS)系所有学生的年龄均不同的学生学号, 姓名和年龄:select sno,sname,sage from student where sageall(select sage from student whe
6、re sdept=CS)四. 使用带Exists谓词的子查询和相关子查询8. 查询与其他所有学生年龄均不同的学生学号, 姓名和年龄:select sno,sname,sage from student A where not exists(select * from student B where A.sage=B.sage and A.snoB.sno) 9. 查询所有选修了1号课程的学生姓名:select sname from student where exists(select * from sc where sno=student.sno and cno=1)10. 查询没有选修了1
7、号课程的学生姓名:select sname from student where not exists(select * from sc where sno=student.sno and cno=1)11. 查询选修了全部课程的学生姓名:SQL Server中: select sname from student where not exists(select * from course where not exists( select * from sc where sno=student.sno and cno=o)11. 查询至少选修了学生95002选修的全部课程的学生的学号:SQL
8、Server中:select distinct sno from sc A where not exists (select * from sc B where sno=95002and not exists(select * from sc C where sno=A.sno and cno=B.cno)12. 求没有人选修的课程号cno和cnamecname:select cno,cname from course C where not exists(select * from sc where o=C.cno )13*. 查询满足条件的(sno,cno)对, 其中该学号的学生没有选修该
9、课程号cno的课程SQL Server中:select sno,cno from student,course where not exists(select * from sc where cno=o and sno=student.sno)14*. 查询每个学生的课程成绩最高的成绩信息(sno,cno,grade):select * from sc A where grade=(select max(grade) from sc where sno=A.sno ) 思考:如何查询所有学生都选修了的课程的课程号cno?select cno from sc group by cno having count(*)=(select count(*) from student)
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1