数据库系统课内实验报告 西安交通大学

更新时间:2024-04-26 09:31:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

数据库系统课内实验报告

系 别 计算机科学与技术 专业班级 计算机15 学生姓名 高君宇 学 号 2110505112 联系电话 18700409397 提交日期 2014年5月4日

一、 实验目的

SQL Server是微软公司开发的大型关系数据库管理系统软件,具有强大的数据存储和数据管理功能。不仅能够满足大型数据处理系统和商业Web站点存储数据的需要,还能为个人或小型企业提供易于使用的数据存储服务。SQL Server是联机事务处理(OLTP)、数据仓库和电子商务应用程序的优秀数据库平台。

掌握SQL Server数据库系统的安装、配置、基本管理。熟练掌握和使用关系数据库语言SQL。了解实际的数据库管理系统软件中安全性和完整性实现机制。了解数据库管理系统软件中数据备份和恢复技术的机制。

二、 实验内容

(一)、在SQL SERVER中创建EXPERIMENT数据库,并在EXPERIMENT中创建学生、课程、选课三个表,表名分别为JSJ1*_S×××、JSJ1*_C×××、JSJ1*_SC×××,其中JSJ表示计算机,*表示班级号,×××表示自己学号的后三位。各表包含属性如下:

JSJ1*_S×××(S#,SNAME,SEX,BDATE,HEIGHT,DORM) JSJ1*_C×××(C#,CNAME,PERIOD,CREDIT,TEACHER) JSJ1*_SC×××(S#,C#,GRADE)其中S#、C#均为外键

(二)、将以下数据加入相应的表中: 表JSJ1*_S×××: S# SNAME BDATE HEIGHT DORM SEX 11032010 王涛 男 1992-4-5 1.72 西14舍221 11032023 孙文 男 1993-6-10 1.80 西14舍221 11032001 张晓梅 女 1993-11-17 1.58 西1舍312 11032005 刘静 女 1992-1-10 1.63 西1舍312 11032112 董卫 男 1992-2-20 1.71 西14舍221 13031011 王倩 女 1993-12-20 1.66 西2舍104 13031014 赵思扬 男 1991-6-6 1.85 西18舍421 13031051 周剑 男 1991-5-8 1.68 西18舍422 13031009 田婷 女 1992-8-11 1.60 西2舍104 13031033 蔡明亮 男 1992-3-12 1.75 西18舍423 表JSJ1*_C×××: C# CNAME PERIOD CREDIT TEACHER CS-01 数据结构 60 3 张军 CS-02 计算机组成原理 80 4 王伟 CS-04 人工智能 40 2 李华 EE-01 信号与系统 40 2 张明 EE-02 数字逻辑电路 100 5 赵正 表JSJ1*_SC×××: S# C# GRADE 11032010 CS-01 82.0 11032010 CS-02 91.0 11032010 CS-04 83.5 11032001 CS-01 77.5 11032001 CS-02 85.0 11032001 CS-04 83.0 11032005 CS-01 62.0 11032005 CS-02 77.0 11032005 CS-04 82.0 11032023 CS-01 55.0 11032023 CS-02 81.0 11032023 CS-04 76.0 11032112 CS-01 88.0 11032112 CS-02 91.5 11032112 CS-04 86.0 13031033 EE-01 93.0 13031033 EE-02 89.0 13031009 EE-01 88.0 13031009 EE-02 78.5 13031011 EE-01 91.0 13031011 EE-02 86.0 13031051 EE-01 78.0 13031051 EE-02 58.0 13031014 EE-01 79.0 13031014 EE-02 71.0 将SQL SERVER企业管理器中显示的上述数据截屏图保存,并写入实验报告中。

(三)、完成以下操作,将相应SQL语句及执行结果截屏图保存,并写入实验报告中。

1.在上述基本表上完成以下查询:

(1) 查询计算机系所开课程的课程号、课程名和学分数。 (2) 查询未选修课程“EE-02”的男生学号、成绩。 (3) 查询1992年~1994年出生的学生的基本信息。 (4) 查询每位学生的学号、学生姓名及其已修学分数。

(5) 查询选修课程“CS-01”的学生中成绩第二高的学生学号。

(6) 查询平均成绩超过“王涛“同学的学生学号、姓名和平均成绩,并按学号进行降序排列。

(7) 查询选修了3门以上课程(包括3门)的学生中平均成绩最高的同学学号及姓名。

2.分别在JSJ1*_S×××和JSJ1*_C×××表中加入记录(‘11032005’,‘向阳’,‘男’,‘1990-12-10’,1.75,‘西14舍312’)及(‘CS-03’,“离散数学”,64,4,‘陈建明’)。

3.将JSJ1*_S×××表中已修学分数大于80的学生记录删除。 4.将课程“CS-04”的学时数调整为56,同时增加一个学分。 5.建立如下视图:

(1)居住在“东9”舍的男生视图,包括学号、姓名、出生日期、身高等属性。 (2)“张明”老师所开设课程情况的视图,包括课程编号、课程名称、平均成绩等属性。

(3)所有选修了“数据结构”课程的学生视图,包括学号、姓名、成绩等属性。

三、 执行结果

1、创建学生、课程、选课三个基本表

(1)学生

(2)课程

(3)选课

2、在三个基本表上进行查询

(1) 查询计算机系所开课程的课程号、课程名和学分数。

(2) 查询未选修课程“EE-02”的男生学号、成绩。

(3) 查询1992年~1994年出生的学生的基本信息。

(4) 查询每位学生的学号、学生姓名及其已修学分数。

(5) 查询选修课程“CS-01”的学生中成绩第二高的学生学号。

(6) 查询平均成绩超过“王涛“同学的学生学号、姓名和平均成绩,并按学

号进行降序排列。

(7) 查询选修了3门以上课程(包括3门)的学生中平均成绩最高的同学学号及姓名。

3、在基本表上进行插入操作

(1)JSJ15_S112表中加入记录(‘11032005’,‘向阳’,‘男’,‘1990-12-10’,1.75,‘西14舍312’):

由于“向阳”同学的学号重复,违反了主键约束,所以我将“向阳”同学的学号改为“11032015”,插入后如下:

(2)在JSJ15_C112表中插入(‘CS-03’,“离散数学”,64,4,‘陈建明’)。

4、基本表上的删除操作。将JSJ15_S112表中已修学分数大于80的学生记录删除。

可见,由于没有学生的已修学分数大于80,故没有记录从学生基本表中删除。

5、基本表更新操作。将课程“CS-04”的学时数调整为56,同时增加一个学分。

6、视图建立操作

(1) 居住在“东9”舍的男生视图,包括学号、姓名、出生日期、身高等属性。

(2)“张明”老师所开设课程情况的视图,包括课程编号、课程名称、平均成绩等属性。

(3)所有选修了“数据结构”课程的学生视图,包括学号、姓名、成绩等属性。

四、 实验过程中出现的问题及解决办法

1、 在学生、课程、选课表之间建立依赖关系时出错。原因是在建立这三个表时,学生表中的类型值改变过,而其他两个表都是默认的,类型不同导致出错。解决办法是,修改其他两个表中的数据类型,使其保持与学生表一致; 2、 一个表有两个主键时要按住ctrl键选择;

3、 Select子句的<目标列表达式>如果不是表中的属性列,则查找结果显示的是“无列名”;

4、 SQL语句经常出错,这是由于自己对SQL语句不熟悉的原因造成的,但出错后系统会有提示,根据错误提示,参考书中的示例不断修改尝试,就能成功;

5、 在实验过程中,由于输入法的问题,输入的字符可能不一样,在进行查

询操作时一定要切换到合适的输入法,否则可能使查询语句无效或错误。 6、 查询中,数据类型因不匹配而发生错误,需要修改相应的数据类型。

五、 实验总结与体会

数据库的实验结束了,通过对上机使用的数据库软件Microsoft SQL Server的学习也加深了我对课本上各方面的知识的理解。

学习的目的在于将知识能合理顺利的运用,将书本知识化为自己所用,是一个不知到知道,了解完善应用的过程,尤其是计算机方面的课程更是如此,必要的上机练习是必不可少的。之前的计算机语言、汇编语言等,都是在上机练习中得到顺利掌握。面对这学期的数据库也是如此的过程,在开始对理论知识的学习,然后进行上机练习,目的在于让我们更好的掌握其知识,熟悉数据库编程语言等。 ,理论与上机的结合这样才有助于我们更好的掌握知识。

在数据库上机中主要是用到的SQL(Structured Query Language)结构化查询语言,它是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。同时也是数据库脚本文件的扩展名。可以帮我们做到面向数据库执行查询、取回数据、插入新的记录、更新数据库中的数据、删除记录、创建新数据库、新表和视图、设置表、存储过程和视图的权限,功能非常强大。 学习数据库的内容是从数据库、数据表的创建和修改开始的,表是建立关系数据库的基本结构,用来存储数据具有已定义的属性,在表的操作过程中,有查看表信息、查看表属性、修改表中的数据、删除表中的数据及修改表和删除表的操作。从课程中中让我更明白一些知识,表是数据最重要的一个数据对象,表的创建好坏直接关系到数数据库的成败,表的内容是越具体越好,但是也不能太繁琐,以后在实际应用中多使用表,对表的规划和理解就会越深刻。在编程方面是需要我们对于编程有逻辑思维能力及一定的编程技巧。在数据库中插入表、表中的信息等都需要注意,不然很容易出错。

上机的学习中也了解到数据库的视图和查询。查询可以通过SQL语言进行完成,这样加深了查询语句的基本结构,让我们能更好的掌握其中语句,方便于我们后面的学习和应用;在视图的操作中,也了解到了视图是常见的数据库对象,是提供查看和存取数据的另一种途径,对查询执行的其中一些操作,可以使用视

图来完成。视图的功能也是强大的,使用视图不仅可以简化数据操作,还可以提高数据库的安全性,不仅可以检索数据,也可以通过视图向基表中添加、修改和删除数据。

在学习过程中也遇到了不少问题,积极询问老师,和同学共同商讨,查询资料把问题得以解决,培养了解决问题的能力,查阅资料是很好的手段,在今后的学习过程中应该继续发扬这些能力。通过这两次的课内实验,我了解了数据库的概念与重要性,还有今后的发展方向,明白数据库的应用是广泛的,不可小觑,在今后应该再进行加强学习。

六、 附录:本次实验SQL语句源代码

SELECT C#,CNAME,CREDIT FROM JSJ15_C112

WHERE C# LIKE 'CS-0%'

SELECT JSJ15_S112.S#,GRADE FROM JSJ15_S112,JSJ15_SC112

WHERE JSJ15_S112.S#=JSJ15_SC112.S# AND C# NOT 'EE-02'

SELECT S#,SNAME,SEX,BDATE,HEIGHT,DROM FROM JSJ15_S112

WHERE BDATE LIKE '1992%' OR BDATE LIKE '1993%' OR BDATE LIKE '1994%'

SELECT JSJ15_S112.S#,SNAME, SUM(CREDIT) FROM JSJ15_S112,JSJ15_C112,JSJ15_SC112

WHERE JSJ15_C112.C#=JSJ15_SC112.C# AND JSJ15_S112.S#=JSJ15_SC112.S# GROUP BY JSJ15_S112.S#,SNAME

SELECT JSJ15_S112.S#

FROM JSJ15_S112,JSJ15_SC112

WHERE C#='CS-01'

AND JSJ15_S112.S#=JSJ15_SC112.S# AND GRADE IN(

SELECT MAX(GRADE) FROM JSJ15_SC112 WHERE C#='CS-01' AND GRADE NOT IN (

SELECT MAX(GRADE) FROM JSJ15_SC112 WHERE C#='CS-01' ) )

SELECT JSJ15_S112.S#,SNAME,AVG(GRADE) FROM JSJ15_S112,JSJ15_SC112

WHERE JSJ15_S112.S#=JSJ15_SC112.S# GROUP BY JSJ15_S112.S#,SNAME

HAVING AVG(GRADE)> (SELECT AVG(GRADE) FROM JSJ15_S112,JSJ15_SC112 WHERE JSJ15_S112.S#=JSJ15_SC112.S# AND SNAME='王涛' )

SELECT JSJ15_S112.S#,SNAME FROM JSJ15_S112,JSJ15_SC112

WHERE JSJ15_S112.S#=JSJ15_SC112.S#

GROUP BY JSJ15_S112.S#, JSJ15_S112.SNAME HAVING COUNT(*)>=3 AND AVG(GRADE)>=ALL (SELECT AVG(GRADE) FROM JSJ15_SC112 GROUP BY S#

HAVING COUNT(*)>=3 )

SELECT JSJ15_S112.S#,SNAME,AVG(GRADE) FROM JSJ15_SC112,JSJ15_S112

WHERE JSJ15_S112.S#=JSJ15_SC112.S# AND JSJ15_S112.S# IN (SELECT JSJ15_S112.S#,SA FROM JSJ15_C112,JSJ15_SC112 WHERE JSJ15_C112.C#=JSJ15_SC112.C#

GROUP BY JSJ15_S112.S# HAVING COUNT(*)>=3 )

INSERT INTO JSJ15_S112

VALUES ('11032005','向阳','男','1990-12-10','1.75','西14舍312') INSERT INTO JSJ15_C112

VALUES ('CS-03','离散数学','64','4','陈建明')

UPDATE JSJ15_C112 SET PERIOD = 56 WHERE C# = 'CS-04' UPDATE JSJ15_C112

SET CREDIT = CREDIT +1 WHERE C# = 'CS-04'

CREATE VIEW S_MALE

AS SELECT S#,SNAME,BDATE,HEIGHT FROM JSJ15_S112 WHERE SEX='男' AND DORM='东9'

CREATE VIEW TEACHER_ZHANG(C#,CNAME,AVG_G) AS SELECT JSJ15_C112.C#,CNAME,AVG(GRADE) FROM JSJ15_C112,JSJ15_SC112 WHERE TEACHER='张明'

GROUP BY JSJ15_C112.C#,JSJ15_C112.CNAME

CREATE VIEW COURSE

AS SELECT JSJ15_S112.S#,JSJ15_C112.CNAME,GRADE FROM JSJ15_S112,JSJ15_C112,JSJ15_SC112 WHERE JSJ15_S112.S#=JSJ15_SC112.S# AND JSJ15_C112.C#=JSJ15_SC112.C# AND JSJ15_C112.CNAME='数据结构'

GROUP BY JSJ15_S112.S# HAVING COUNT(*)>=3 )

INSERT INTO JSJ15_S112

VALUES ('11032005','向阳','男','1990-12-10','1.75','西14舍312') INSERT INTO JSJ15_C112

VALUES ('CS-03','离散数学','64','4','陈建明')

UPDATE JSJ15_C112 SET PERIOD = 56 WHERE C# = 'CS-04' UPDATE JSJ15_C112

SET CREDIT = CREDIT +1 WHERE C# = 'CS-04'

CREATE VIEW S_MALE

AS SELECT S#,SNAME,BDATE,HEIGHT FROM JSJ15_S112 WHERE SEX='男' AND DORM='东9'

CREATE VIEW TEACHER_ZHANG(C#,CNAME,AVG_G) AS SELECT JSJ15_C112.C#,CNAME,AVG(GRADE) FROM JSJ15_C112,JSJ15_SC112 WHERE TEACHER='张明'

GROUP BY JSJ15_C112.C#,JSJ15_C112.CNAME

CREATE VIEW COURSE

AS SELECT JSJ15_S112.S#,JSJ15_C112.CNAME,GRADE FROM JSJ15_S112,JSJ15_C112,JSJ15_SC112 WHERE JSJ15_S112.S#=JSJ15_SC112.S# AND JSJ15_C112.C#=JSJ15_SC112.C# AND JSJ15_C112.CNAME='数据结构'

本文来源:https://www.bwwdw.com/article/9h3p.html

Top