选课序号:25
大连海事大学 数据库原理课程实验报告
(2013-2014学年第二学期)
实验四 高级查询
班 级: 软件工程四班 学 号: 2220121787 姓 名: 马跃 指导教师: 曹 志 英
成 绩:
大连海事大学软件工程系 2014年 6 月 23 日
1
目 录
1 实验目的............................................................................................... 3 2 实验内容............................................................................................... 3
2.1
掌握SQL高级查询使用方法 ..................................................................................... 3
3 实验要求............................................................................................... 3 4 实验步骤............................................................................................... 3
4.1
掌握SQL高级查询使用方法 ..................................................................................... 3
5 总结与体会........................................................................................... 6
5.1
5.2 5.3
实验中出现的问题及其解决方案 ............................................................................... 6 总结 ............................................................................................................................... 7 体会 ............................................................................................................................... 7
2
1 实验目的
(1) 掌握SQL的高级查询的使用方法,如分组统计、嵌套查询、集合查询等等。
2 实验内容
2.1 掌握SQL高级查询使用方法
(1) 分组统计。
(2) 嵌套查询,包括IN查询、EXISTS查询。 (3) 集合查询。
3 实验要求
(1) 深入复习教材第三章SQL有关高级查询语句。
(2) 根据书上的例子,针对DBTestBed数据库模式设计分组统计查询、嵌套查询(IN、
EXISTS)语句和集合查询语句,每种类型的基本查询至少要设计一个查询,描述清楚查询要求,运行你所设计的查询语句,并截图相应的实验结果,每幅截图并要有较为详细的描述。也可以按照附1所列示例查询做实验。
(3) 实验步骤和实验总结中要详细描述实验过程中出现的问题、原因和解决方法。
4 实验步骤
4.1 掌握SQL高级查询使用方法
(1) 不带分组过滤条件的分组统计查询。
统计2013-2014上学期信息学院(01)开设的每门课程的最高分,最低分,及平均成绩。
select C.coursename,avg(score) AVGS,max(score) MAXS,min(score) MINS from tb_select_course A,Tb_Cultivate_Scheme B,Tb_Course_info C where A.schemeid=B.schemeid and B.cyear='2013' and B.term='上' and C.courseid=B.courseid and C.deptid='01' group by C.coursename
3
(2) 带分组过滤条件的分组统计查询。
查询选修了1门以上课程的学生学号,姓名,年级,专业名称
select A.graduateid,graduatename,grade,specialityname
from tb_student_info A,tb_speciality_info B,tb_select_course C where A.specialityid=B.specialityid and C.graduateid=A.graduateid group by A.graduateid,A.graduatename,grade,specialityname having count(A.graduateid)>1
(3) 单层IN查
查询学号为’1787’的学生信息。
from tb_student_info A where graduateid in( select graduateid from tb_student_info D where D.graduateid='1787')
select A.graduateid,graduatename,sex,city,email,tel,birthday
(4) IN嵌套查询。
查询“信息科学技术学院”学生姓名和学号和家庭地址。
select graduateid,graduatename,city from tb_student_info where specialityid in (select specialityid from tb_speciality_info where deptid in (select deptid
from tb_dept_info
where deptname='信息科学技术学院' )
)
4
(5) 带有比较运算符的子查询
查询指导教师为“曹志英”的所有学生学号姓名和电话。
select graduateid,graduatename,tel from tb_student_info where tutorid=
(select tutorid from tb_tutor_info where tutorname='曹志英'
)
(6) 单层EXISTS嵌套查询。
所有选修培养方案号(SchemeID)为3的学生姓名
select graduatename from tb_student_info A where exists
(select *
from tb_select_course B
where B.schemeid='01' and A.graduateid=B.graduateid )
(7) 双层EXISTS嵌套查询。
查询选修了全部课程的学生姓名
select graduatename from tb_student_info A where not exists
(select *
from tb_course_info B,tb_cultivate_scheme D
where B.courseid=D.courseid and not exists (select *
from tb_select_course C
where graduateid=A.graduateid and
schemeid=D.schemeid
))
5
(8) 集合查询(交、并、差各设计一个)。
查询“曹志英”老师和“宗雪飘”老师都授过课的学生姓名学号。
select graduatename,A.graduateid
from tb_student_info A,tb_select_course B
where A.graduateid=B.graduateid and B.teacher='01' union
select graduatename,A.graduateid
from tb_student_info A,tb_select_course B
where A.graduateid=B.graduateid and B.teacher='02'
查询“曹志英”老师和“宗雪飘”老师授过课的所有学生姓名学号。
select graduatename,A.graduateid
from tb_student_info A,tb_select_course B
where A.graduateid=B.graduateid and B.teacher='01' intersect
select graduatename,A.graduateid
from tb_student_info A,tb_select_course B
where A.graduateid=B.graduateid and B.teacher='02'
查询选修过“曹志英”老师的课程,却没有听过“宗雪飘”课程的学生姓名学号。
select graduatename,A.graduateid
from tb_student_info A,tb_select_course B
where A.graduateid=B.graduateid and B.teacher='01' except
select graduatename,A.graduateid
from tb_student_info A,tb_select_course B
where A.graduateid=B.graduateid and B.teacher='02'
5 总结与体会
5.1 实验中出现的问题及其解决方案
在group by查询学号姓名时没有将,没有将姓名放在group by语句中,结果出现查询不正确,最后请教老师,在group by分组时应将查询的内容都包含。
6
5.2 总结
感觉这个实验相对于上几个实验比较难,尤其是双层EXISTS嵌套查询,自己的理解还不是很到位,但是慢慢参考书上的例子,将代码写了出来。
5.3 体会
感觉自己自己学习的数据库还不是很踏实,还应该继续努力脚踏实地,不要急于求成,自己不会时应该多向同学老师请教。
7