实验三四(标准答案)
- 格式:doc
- 大小:114.50 KB
- 文档页数:6
实验三四(答案)[1]
2
———————————————————————————————— 作者:
———————————————————————————————— 日期:
实验三:数据库的嵌套查询实验
实验目的:
加深对嵌套查询语句的理解。
实验内容:
使用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='刘晨') 的异同
比较: select * from student where sdept =
(select sdept from student where sname='刘晨') andsname<>'刘晨V
比较: select S1.* from student S1, student S2 where S1.sdept=S2.sdept and
S2.sname='刘晨'
2. 查询选修了课程名为’信息系统’ 的学生的学号和姓名:
SQL Server中: select sno, sname from student where sno in
(select sno from sc where cno in
(select cno from course where cname='信息系统'))
VFP中: 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 (selectsnofrom sc where cno='1')
and sno in (select sno from sc where cno='2')
比较: 查询选修了课程’1’或课程’2’的学生的sno:
select sno from sc where cno='1' or cno='2'
比较连接查询:
select A.sno from sc A, sc B where A.sno=B.sno and o='1' and o='2' 二. 使用带比较运算的子查询
4. 查询比’刘晨’年龄小的所有学生的信息:
select * from student where sage<
(select sage from student where sname='刘晨')
三. 使用带Any, All谓词的子查询
5. 查询其他系中比信息系(IS)某一学生年龄小的学生姓名和年龄;
select sname, sage from student where sage (select sage from student where sdept='IS') and sdept<>'IS' 6. 查询其他系中比信息系(IS)学生年龄都小的学生姓名和年龄: select sname, sage from student where sage (select sage from student where sdept='IS') and sdept<>'IS' 7. 查询与计算机系(CS)系所有学生的年龄均不同的学生学号, 姓名和年龄: select sno,sname,sage from student where sage<>all (select sage from student where 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.sno<>B.sno) 9. 查询所有选修了1号课程的学生姓名: select sname from student where exists (select * from sc where sno=student.sno and cno='1') 10. 查询没有选修了1号课程的学生姓名: 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 Server中: select distinct sno from sc A where not exists (select * from sc B where sno='95002'and not exists (select * from sc C where sno=A.sno and cno=o)) 12. 求没有人选修的课程号cno和cnamecname: select cno,cname from course C where not exists (select * from sc where o=o ) 13*. 查询满足条件的(sno,cno)对, 其中该学号的学生没有选修该课程号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? 实验四:数据库的分组查询和统计查询 实验目的: 熟练掌握数据查询中的分组、统计、计算和集合的操作方法。 实验内容: 使用聚集函数查询、分组计算查询、集合查询。 实验步骤: 一. 使用聚集函数: 1. 查询学生总人数: Select Count(*) as 学生总数 from student 2. 查询选修了课程的学生总数: select count(distinct sno) as 选课学生总数 from sc 3. 查询所有课程的总学分数和平均学分数,以及最高学分和最低学分: select sum(credit) as 总credit,avg(credit) as 课程平均学分,max(credit) as 最高学分, min(credit) as 最低学分 from course 4. 计算1号课程的学生的平均成绩, 最高分和最低分: select avg(grade) as 平均成绩,max(grade) as 最高分, min(grade) as 最低分 from scwhere cno='1' 5. 查询’信息系’(IS)学生”数据结构”课程的平均成绩: select avg(grade) from student, course, sc where student.sno=sc.sno and o=o and sdept='IS' and cname='数据结构' 6*. 查询每个学生的课程成绩最高的成绩信息(sno,cno,grade): select * from grade A where grade= (select max(grade) from sc where sno=A.sno ) 7*. 求成绩低于该门课程平均成绩的学生的成绩信息(sno,cno,grade) select * from grade A where grade= (select avg(grade) from sc where cno=o )