当前位置:文档之家› 北邮大三下数据库实验报告3

北邮大三下数据库实验报告3

北京邮电大学
实验报告
课程名称数据库系统原理
实验内容实验(三)
实验名称数据查询实验
班级2013211***姓名***
指导老师卢向群成绩_________
2016年4月20日
实验三数据查询实验
实验目的
通过对实验二中建立的数据库关系表和视图的各种查询的操作,加深对SQL语言和Transact SQL查询语言的了解,掌握相关查询语句的语法和使用方法。

实验内容
数据库关系表查询:
(1)简单的查询操作,包括单表的查询、选择条件、结果排序等的练习;
(2)多表的连接查询,包括等值连接、自然连接等;
(3)复杂的查询操作,包括使用分组函数等库函数的查询操作;
(4)练习带有IN、比较符的嵌套查询。

具体内容包括:
1.简单查询:
(1)查询班号为g99401班的学生的学号和姓名;
表中没有该班级的学生,故查询结果为空。

(2) 查询“数据库开发技术”课程的学分;
(3) 查询选修了课程编号为“dep04_s003”的学生的学号和成绩,并将成绩按降序输出;
(4) 查询学号为“g9940205”的学生选修的课程编号和成绩;
(5) 查询选修了课程编号为“dep04_s001”且成绩高于85分的学生的学号和成绩。

2.在多表连接的查询实验中,在SQL SERVER提供的交互式语言环境下用Transact
SQL语句完成以下查询操作:
(1)查询选修了课程编号为“dep04_s002”且成绩高于85分的学生的学号、姓名和成绩;
该题与上一题的差别在于学生姓名,这一属性与成绩不在同一张表中,故需要对两张表做自然连接。

(2)查询所有学生的学号、姓名、选修的课程名称和成绩;
需要用到三张表,把三张表做自然连接,语句如下:
查询结果如下:
(3)查询计算机科学系林红同学选修的课程名称、学分和成绩。

(考试成绩>=60有学分,
否则无学分。

)
这个查询看似困难,实际上只是因为设计的表格较多,所以麻烦而已,只要将五张表自然连接就可以了。

查询结果为空,说明计算机科学系没有叫“林红”的学生。

3.在复杂查询实验中,在SQL SERVER提供的交互式语言环境下用Transact SQL语句
完成以下查询操作:
(1)查询至少选修了三门课程的学生的学号和姓名;
先根据学生学号来分组,找出每个学生选的所有课程,再计算其选课数量。

(2)查询选修课程号为“dep04_b001”的学生的平均成绩;
(3)查询所有学生的学号和他选修课程的最高成绩,要求他的选修课程中没有成绩为空的。

与上题类似,先根据学生id分组,再在分组中选出最高成绩。

(4)查询严为老师2001/2002学年教的软件开发技术课程的最高成绩及此学生的学号、姓
名、班级。

这题比较困难,不但涉及的表格很多,查找条件也不容易。

原本想用max来做,但是会出现分组不正确的情况,所以改成了嵌套比较。

(5)查询数据库开发技术课程用过的教材名称,作者和出版社。

(6)查询计算机科学系讲授过数据库开发技术的老师姓名和职称。

4.在嵌套查询实验中,在SQL SERVER提供的交互式语言环境下用Transact SQL语句
完成以下查询操作,要求写嵌套查询语句:
(1)查询选修了电磁波工程的学生的学号和姓名;
这个查询设计三张表,可以将三张表做自然连接,也可以用嵌套的方法。

本题我采用的是嵌套查询。

先选出选修了该课的所有学生学号,再在student表中投影他们的姓名。

由于没有选了“电磁波工程”这门课的学生,我换了“软件开发技术”这门课来验证自己的查询语句。

(2)查询没有选修电磁波工程的学生的学号和姓名;
与上题同样的方法,只是条件相反,加了一个“not”。

(3)查询至少选修了学号为“g9940201”的学生所选修的所有课程的学生的学号和姓名。

这道题比较难,用到了三层嵌套的相关子查询。

5.建立如下视图:
学生选修课程信息视图,包括以下内容:
1)学生学号、姓名、所在系、授课老师姓名、课程名称、课程教材名称、出版社、学分、选课成绩
视图如下:
2)修改以上视图,增加学生所在班级信息。

SQL语言如下,在5(1)的基础上增加了class表里的几个属性,和student,class表的连接
视图如下:
3)对以上视图进行相关的查询操作:
(1) 查询选修了计算机基础的学生的学号和成绩:
(2) 查询所有学生的学号、姓名、选修的课程名称和成绩:
(3)查询选修了乔红老师课程的学生的学号和姓名、课程名称:
实验总结:
1.建立视图可以使用资源管理器,但是有个弊端:当涉及多张表时,默认做笛卡尔乘积,没法做自己想要的连接。

所以掌握SQL语言非常重要。

2.在涉及的表格不多、条件不复杂时,将表格自然连接会比较方便;但是当条件复杂、涉及表格多时,用嵌套更方便。

3.在纸上罗列需要的属性、所在的表格以及表格该如何连接等等,有助于理清思路,更快更准确地找到恰当的查询方法。

4.嵌套子查询最好不要超过两层,不然理解起来很困难。

尽量还是用非嵌套子查询比较不容易出错。

相关主题