伍宏淳 3114000825 my软件工程与数据库技术实验指导及报告.docx

上传人:b****6 文档编号:6835227 上传时间:2023-01-11 格式:DOCX 页数:22 大小:226.03KB
下载 相关 举报
伍宏淳 3114000825 my软件工程与数据库技术实验指导及报告.docx_第1页
第1页 / 共22页
伍宏淳 3114000825 my软件工程与数据库技术实验指导及报告.docx_第2页
第2页 / 共22页
伍宏淳 3114000825 my软件工程与数据库技术实验指导及报告.docx_第3页
第3页 / 共22页
伍宏淳 3114000825 my软件工程与数据库技术实验指导及报告.docx_第4页
第4页 / 共22页
伍宏淳 3114000825 my软件工程与数据库技术实验指导及报告.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

伍宏淳 3114000825 my软件工程与数据库技术实验指导及报告.docx

《伍宏淳 3114000825 my软件工程与数据库技术实验指导及报告.docx》由会员分享,可在线阅读,更多相关《伍宏淳 3114000825 my软件工程与数据库技术实验指导及报告.docx(22页珍藏版)》请在冰豆网上搜索。

伍宏淳 3114000825 my软件工程与数据库技术实验指导及报告.docx

伍宏淳3114000825my软件工程与数据库技术实验指导及报告

2017版

 

《软件工程及数据库技术》

实验报告

 

实验报告作者(姓名及学号):

伍宏淳**********

实验指导教师:

鲍芳

实验时间:

2017-2018

(1)

实验班级:

自动化学院自动化14级班

 

实验中心三号楼

广东工业大学

广东工业大学实验报告

自动化学院自动化专业1班成绩评定_______

学号**********姓名伍宏淳(合作者____号____)教师签名_______

预习情况

操作情况

考勤情况

数据处理情况

实验一题目数据库的定义、建立和维护实验第___周星期___第___节

一、实验目的与要求

要求熟练掌握和使用SQL、SQLServerManagementStudio创建数据库、表、索引和修改表结构,并学会使用SQLServer查询分析器接受SQL语句和进行结果分析;

要求熟练掌握和使用SQL、SQLServerManagementStudio向数据库输入数据、修改数据和删除数据操作。

二、实验方案

1、在SQLServerManagementStudio中创建及打开数据库,在“新建数据库”时指明数据文件及事务日志的位置;

2、在SQLServerManagementStudio中用SQL语句实现以下各表:

学生(学号,姓名,性别,出生日期,所属学院,已通过选课数);

课程(课程号,课程名,先行课号);

选课(学号,课程号,成绩);

3、建立库、表和表间的联系,选择合适的数据类型,定义必要的列级约束(包括性别约束‘男’或‘女’,已通过选课数的缺省值为0;成绩约束0~100,允许为null);定义表级约束(参照完整性约束)。

创建数据库中的表并刷新后,在对象资源管理器窗口可见该表及其所拥有的键及约束:

学生:

键:

1,约束:

2;课程:

键:

1;选课:

键:

3,约束:

2。

4、通过SQLServerManagementStudio实现对学生成绩管理数据库的数据增加、数据删除和数据修改操作。

要求每个表的记录在10行以上(可参考实验二至四的查询任务要求设计表中记录);输入数据检验各数据约束的限制;数据更改和数据删除时检验外码约束;

三、实验结果和数据处理

1、给出实现数据库表的SQL语句;

实验的SQL语句:

CREATETABLE学生(学号CHAR(5)NOTNULLPRIMARYKEY,

姓名CHAR(8)NOTNULL,

性别CHAR

(2),

出生日期datetimenotnull,

所属学院CHAR(20),

已通过选课数INTDEFAULT0,

CONSTRAINTC2CHECK(性别IN('男','女')));

CREATETABLE课程(课程号CHAR(5)PRIMARYKEY,

课程名CHAR(20),

先行课号CHAR(30));

CREATETABLE选课(学号CHAR(5),

课程号CHAR(5),

成绩SMALLINT,

CONSTRAINTC3CHECK(成绩BETWEEN0AND100),

CONSTRAINTC4PRIMARYKEY(学号,课程号),

CONSTRAINTC5FOREIGNKEY(学号)REFERENCES学生(学号),

CONSTRAINTC6FOREIGNKEY(课程号)REFERENCES课程(课程号));

上面的语句为三个表的创建语句。

2、给出用SQL语句实现数据增加、数据删除和数据修改的共6个例句;

增加语句:

insert

into学生(学号,姓名,性别,出生日期,所属学院)

values('S05','红唇','男','1995-03-24','数学');

数据修改语句:

update选课

set成绩=成绩*0.5

whereexists(select*from课程

where课程名='模拟电子技术')

在表中插入子查询的结果集:

CREATETABLE学院平均年龄(学院CHAR(20),

平均年龄SMALLINT);

Insert

Into学院平均年龄

Select学院,avg(all年龄)

From学生

Groupby学院;

数据删除语句:

Delectfrom选课

Where学号in(select学号

From学生

Where学院=’自动化’);

3、以截图形式附上所设计的数据库表的样本数据,每张表的记录为10行;

 

学生:

课程:

选课:

四、结论

答:

创建表时,先要设计好表内的内容和约束,添加约束可以防止在增加表中内容时,排除一些及其错误性的内容。

在添加内容的时候有多行添加和单行添加,删除行,更新行,可以根据需要对数据库进行SQL语句操作。

五、问题与讨论

1、举例说明创建外键的SQL语句中的参照表和被参照表各指什么?

举例说明如何在数据更改和数据删除时检验外码约束?

举例说明创建外键时有无ONDELETECASCADE关键字对删除记录有何影响?

(两位同学为一组,设计不同的外键约束实验方案后对比实验结果)

答:

1.ALTERTABLE选课

ADDCONSTRAINTFK_课程号

FOREIGNKEY(课程号)REFERENCES课程(课程号)

参照表:

选课,被参照表:

课程

2.删除学生表的学生信息,选课表相应的信息也会删除。

3.ONDELETECASCADE指定如果试图删除某行,而该行含有由其它表的现有行中的外键所引用的键,则也将删除所有包含那些外键的行。

如果在目标表上也定义了级联引用操作,则对从那些表中删除的行同样采取指定的级联操作。

2、举例说明如何在输入数据时检验各数据约束的限制?

属性“成绩”成绩输入为null或0时有区别吗?

答:

1.运行程序的时候,看看有没有报错误。

2.区别,null是无数据,并不代表0,0是已经把该学生的成绩变为0了。

3、(可选)如果考虑课程表中的递归关系,应该如何修改你的sql语句?

在向此表插入数据时应该注意什么问题?

4、实验中遇到的问题及解决方法。

答:

遇到的问题:

实验中遇到的问题主要是数据类型的选择和格式问题,数据类型中选择null跟int类型是不同概念,最后用INTDEFAULT0来代替null,已选课程没有的时候为0;

问题所在:

在写创建外键的SQL语句时,忘了写外键的被参照表表名;

解决方法:

写上外键的被参照表表名。

 

广东工业大学实验报告

自动化学院自动化专业1班成绩评定_______

学号3114000825姓名伍宏淳(合作者____号____)教师签名_______

预习情况

操作情况

考勤情况

数据处理情况

实验二题目数据库的简单查询和连接查询实验第___周星期___第___节

一、实验目的与要求

要求熟练掌握和使用SQL、SQLServerManagementStudio对数据库进行简单表的数据查询、数据排序和和数据联结查询的操作方法,加深对SQL语言的查询语句的理解。

二、实验方案

通过SQLServerManagementStudio实现对学生成绩管理数据库的以下简单查询和连接查询:

1.求数学系学生的学号和姓名;

2.(optional)查询数学系学生的信息,包括学号、姓名、性别和年龄(提示:

year(getdate())-year(出生日期)as年龄);

3.求选修了课程的学生学号;

4.求选修课程C1的学生学号和成绩,并要求对查询结果按成绩降序排列,如果成绩相同则按学号升序排列;

5.求选修课程C1且成绩在80~90分之间的学生学号和期末考试成绩,其中期末考试成绩为选修表中成绩乘以系数0.8;

6.求数学系或计算机系姓张的学生的信息;

7.求缺少了成绩的学生的学号和课程号;

8.查询每门课程的先行课程名;

三、实验结果和数据处理

(给出各SQL语句及对应查询结果)

1.select姓名,学号from学生where所属学院='数学'

2.select姓名,学号,性别,year(getdate())-year(出生日期)as年龄from学生where所属学院='数学'

3.select学号from选课where课程号isnotnull

4.select学号,成绩from选课where课程号='c1'orderby成绩desc,学号

5.select学号,0.8*成绩as期末成绩from选课where(课程号='c1')and(成绩>=80and成绩<=90)

6.select*from学生where(所属学院='数学'or所属学院='计算机')and姓名like'张%'

7.select学号,课程号from选课where成绩isnull

8.select课程号,课程名,先行课名from

(select课程号,课程名,先行课号from课程where先行课号isnotnull)a,

(select课程号as先行课号,课程名as先行课名from课程)b

Wherea.先行课号=b.先行课号

四、结论

l、同个数据库中,不允许有重名的基本表,表的命名格式必须遵从标示符的命名规则;

2、同个基本中不允许出现重复的列名,其命名格式必须遵从标示符的命名规则:

3、需要为表中的每一个属性设置数据类型:

4、一个基本表中只能定义一个主码约束,被定义为主码的列的值不能为空;

5、SQLSELECT子句指定哪些列将在查询结果集中列出

6、SQLFROM子句指定将从哪些表进行查询

7、SQLWHERE子句指定哪些行将在查询结果集中列出

五、问题与讨论

1、如何提高数据查询和连接速度?

答:

能够分开的操作尽量分开处理,提高每次的响应速度;

尽量避免在WHERE子句中对字段进行函数或表达式操作,这将导致引擎放弃使用索引而进行全表扫描。

对索引优化,建索引的选择必须结合SQL查询、修改、删除语句的需要,一般的说法是在WHERE里经常出现的字段建索引。

如果在WHERE经常是几个字段一起出现而且是用AND连接的,那就应该建这几个字段一起的联合索引,而且次序也需要考虑,一般是最常出现的放前面。

2、(可描述实验中遇到的问题及解决方法)

答:

问题:

在统计过程中,有重复项的加入。

解决:

使用DISTINCT来清楚重复项

广东工业大学实验报告

自动化学院自动化专业1班成绩评定_______

学号3114000825姓名伍宏淳(合作者____号____)教师签名_______

预习情况

操作情况

考勤情况

数据处理情况

实验三题目数据库的嵌套查询和统计查询实验第___周星期___第___节

一、实验目的与要求

进一步掌握SQLServerManagementStudio的使用方法,加深SQL语言的嵌套查询语句的理解;熟悉掌握数据查询中的分组和统计的操作方法。

二、实验方案

通过SQLServerManagementStudio实现对数据库的以下嵌套查询,并尝试用多种形式表示实验中的查询语句,并进行比较。

1、求选修了高等数学的学生学号和姓名;

2、求C1课程的成绩高于张三的C1课程成绩的学生学号和成绩;

3、求选修C1课程号的学生学号;

4、求没有选修C2课程号的学生学号;

5、求选修C1课程而没有选修C2课程的学生姓名;

6、求选修C1及C2课程的学生姓名(使用关键字INTERSECT);

通过SQLServerManagementStudio实现以下对数据库的统计查询;

7、用SQL语句实现计算机系学生人数的统计;

8、用SQL语句实现各系学生人数的统计;

9、统计被选课程及选修该课程的人数;

10、用SQL语句统计选修了课程的学生人数;(提示:

剔除重复记录需要使用关键字…….)

11、统计各门课程的选修情况(要求显示未被选修课程及选修某课程的人数等);(提示:

使用左连接)

12、用SQL语句统计每个学生全部课程的平均成绩;

13、用SQL语句统计选修课超过3门课的学生学号;(提示:

使用having)

三、实验结果和数据处理

1、求选修了高等数学的学生学号和姓名;

select学号,姓名from学生

where学号in(select学号from选课

where课程号in(select课程号

from课程

where课程名='高等数学'));

方法二:

select学号,姓名from

(select学号,姓名from学生)a,

(select学号as选课学号,课程号as选课程号from选课)b,

(select课程号,课程名from课程)c

wherea.学号=b.选课学号andb.选课程号=c.课程号andc.课程名='高等数学';

2、求C1课程的成绩高于张三的C1课程成绩的学生学号和成绩;

select学号,成绩from选课

where课程号='c1'and成绩>(select成绩from选课

where课程号='c1'and学号=(select学号

from学生

where姓名='张三'));

3、求选修C1课程号的学生学号;

Select学号

From学生

Whereexists(select*

From选课

Where学生.学号=学号and课程号=’c1’)

方法二:

Select学号

From学生,选课

Where学生.学号=选课.学号and课程号=’c1’;

4、求没有选修C2课程号的学生学号;

Select学号

From学生

Wherenotexists(select*

From选课

Where学生.学号=学号and课程号=’c2’

方法二:

Select学号

From学生,选课

Where学生.学号=选课.学号and课程号<>’c1’;

5、求选修C1课程而没有选修C2课程的学生姓名;

Select学号

From选课

Where课程号=’c1’

Minus

Select学号

From选课

Where课程号=’c2’

方法二:

selectdistinct姓名from

(select学号,姓名from学生)a,

(select学号from选课where课程号='c1')b,

(select学号from选课where课程号!

='c2')c

wherea.学号=b.学号andb.学号=c.学号;

6、求选修C1及C2课程的学生姓名(使用关键字INTERSECT);

通过SQLServerManagementStudio实现以下对数据库的统计查询;

Select学号

From选课

Where课程号=’c1’

Intersect

Select学号

From选课

Where课程号=’c2’

方法二:

select姓名from学生where学号=(

select学号from选课where课程号=’c1’

INTERSECT

select学号from选课where课程号=’c2’);

7、用SQL语句实现计算机系学生人数的统计;

selectcount(*)as计算机系学生总数

from学生where所属学院='计算机';

8、用SQL语句实现各系学生人数的统计;

selectcount(*)as院系学生总数,所属学院as院系

from学生groupby所属学院;

9、统计被选课程及选修该课程的人数;

select课程号,课程名,选课人数from

(select课程号as选课课程号,count(*)as选课人数from选课groupby课程号)a,

(select课程号,课程名from课程)b

wherea.选课课程号=b.课程号;

方法二:

select课程号,count(*)

from选课groupby课程号;

10、用SQL语句统计选修了课程的学生人数;(提示:

剔除重复记录需要使用关键字…….)

selectCOUNT(distinct学号)as已选课学生人数

from选课;

11、统计各门课程的选修情况(要求显示未被选修课程及选修某课程的人数等);(提示:

使用左连接)

select课程号,课程名,选课人数from

(select课程号,课程名from课程)aleftjoin

(select课程号as选课课程号,count(*)as选课人数from选课groupby课程号)b

ona.课程号=b.选课课程号;

12、用SQL语句统计每个学生全部课程的平均成绩;

select学号,姓名,平均成绩from

(select学号,姓名from学生)aleftjoin

(select学号as选课学号,AVG(成绩)as平均成绩from选课groupby学号)b

ona.学号=b.选课学号;

13、用SQL语句统计选修课超过3门课的学生学号;(提示:

使用having)

select学号from选课groupby学号havingCOUNT(*)>3;

四、结论

1、数据的输入必须符合主键约束,切主键的值不能为空,不能重复;

2、主键的值不能修改,删除记录必须遵从参照完整性约束;

3、更新的数据必须符合属性所设置的数据类型;

4、根据嵌套的可以解决大部分的查询问题,大大提高效率,但是在查询过程中要确定好之间的关系,只有这样才能写出有效的SQL语句,查询到理想的结果。

五、问题与讨论

1、嵌套查询和连接查询有何区别?

在本实验的查询任务中,哪些是可以由嵌套查询和连接查询实现?

答:

若一个查询同时涉及两个或两个以上的表,则称之为连接查询。

嵌套查询是指在一个外层查询中包含有另一个内层查询,即一个SQL查询语句块可以嵌套在另一个查询块的WHERE子句中。

嵌套查询是可以用连接来代替的,而且使用连接的方式,性能要比嵌套查询高出很多。

②实验中有很多可以用到,例如:

求选修C1课程号的学生学号;求没有选修C2课程号的学生学号;求选修C1课程而没有选修C2课程的学生姓名。

2、针对查询任务4“求没有选修C2课程号的学生学号”,SQL语句“SELECT学号FROM选课WHERE课程号<>‘C2’”可以完成该查询任务吗?

为什么?

答:

不可以,<>符号不合法,必须使用逻辑and的方法代替<>。

3、试用GROUPBY(分组条件)字句后,语句中的统计函数的运行结果有什么不同?

答:

用GROUPBY字句后,列值相等都集中以一个元组的形式出现。

运行结果会根据GROUPBY后面接的列来分开统计,WHERE一般在GROUPBY前面,HAVING一般在GROUPBY后面。

 

广东工业大学实验报告

自动化学院自动化专业1班成绩评定_______

学号3114000825姓名伍宏淳(合作者____号____)教师签名_______

预习情况

操作情况

考勤情况

数据处理情况

实验四题目视图、存储过程与触发器的定义及使用实验第___周星期__第_节

一、实验目的与要求

掌握SQLServerManagementStudio中视图的创建和使用,加深对视图和SQLServer图表作用的理解;掌握SQLServerManagementStudio中存储过程及触发器的创建方法及其使用方法,了解视图与存储过程的异同,约束与触发器的区别。

二、实验方案

通过SQLServerManagementStudio实现成绩管理数据库的视图、存储过程及触发器的创建及使用,完成以下任务:

1、建立自动化学院学生信息统计的视图,要求包括自动化学院学生的学号、姓名、性别和年龄;

2、创建一个带输入参数的存储过程selectByDepartmentWithInput。

该存储过程的作用是:

当给定基本表学生所属学院名称时,将返回该学院所有学生的基本信息。

3、执行selectByDepartmentWithInput存储过程,查询“自动化”学院的学生信息。

4、为选课表建立一个名为tri_NumberPassedAdded的INSERT触发器,当用户向该表中插入记录时,如果成绩大于或等于60,则令学生表中该学生的属性“已通过选课数”加1,否则显示“无成绩或成绩低于60,不需要更新学生表中的已通过课程数!

5、由学生、课程和选课三个表,定义一个自动化学院的学生成绩视图,其属性包括学号、姓名、课程名和成绩;

6、将学生的学号、平均成绩定义成一个视图“学生平均成绩”,并基于该视图统计学生的学号、姓名、平均成绩及已通过选课数;

三、实验结果和数据处理

1、建立自动化学院学生信息统计的视图,要求包括自动化学院学生的学号、姓名、性别和年龄;

CREATEVIEW[自动化学院学生信息统计]AS

SELECT学号,姓名,性别,year(getdate())-year(出生日期)as年龄

from学生where所属学院='自动化';

select*from[自动化学院学生信息统计];

2、创建一个带输入参数的存储过程selectByDepartmentWithInput。

该存储过程的作用是:

当给定基本表学生所属学院名称时,将返回该学院所有学生的基本信息。

CREATEPROCEDUREselectByDepartmentWithInput

@CampusNamevarchar(20)

ASSELECT学号,姓名,性别,year(getdate())-year(出生日期)as年龄

from学生where所属学院=@CampusName;

GO

3、执行selectByDepartmentWithInput存储过程,查询“自动化”学院的学生信息。

execselectByDepartmentWithInput'自动化';

4、为选课表建立一个名为tri_NumberPassedAdded的INSERT触发器,当用户向该表中插入记录时,如果成绩大于或等于60,则令学生表中该学生的属性“已通过选课数”加1,否则显示“无成绩或成绩低于60,不需要更新学生表中的已通过课程数!

CREATETRIGGERtri_Numbe

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 幼儿读物

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1