数据库原理实验报告.docx

上传人:b****6 文档编号:6708866 上传时间:2023-01-09 格式:DOCX 页数:21 大小:23.67KB
下载 相关 举报
数据库原理实验报告.docx_第1页
第1页 / 共21页
数据库原理实验报告.docx_第2页
第2页 / 共21页
数据库原理实验报告.docx_第3页
第3页 / 共21页
数据库原理实验报告.docx_第4页
第4页 / 共21页
数据库原理实验报告.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

数据库原理实验报告.docx

《数据库原理实验报告.docx》由会员分享,可在线阅读,更多相关《数据库原理实验报告.docx(21页珍藏版)》请在冰豆网上搜索。

数据库原理实验报告.docx

数据库原理实验报告

《数据库原理》

 

学号:

08093556

姓名:

张雪涛

班级:

信科09-2班

指导教师:

谢红侠

中国矿业大学计算机科学与技术学院

2011年4月

数据库原理教师成绩评定表

评定成绩的依据:

①基础理论及基本技能的掌握

②独立解决实际问题的能力;

③研究内容的理论依据和技术方法;

④取得的主要成果

⑤工作态度及工作量;

成绩采用优良中差四个等级

评定成绩表

实验序号

实验成绩

指导教师

日期

实验一

实验二

实验一:

SQL数据定义功能

一、实验内容及要求

1.使用SQL语句建立学生管理系统相关的表,同时完善各表的相关完整性约束。

其中带有下划线的为主码

学院(学院代码,学院名称)

学生(学号,姓名,性别,学院代码),学院代码为外码

教师(教师号,教师姓名,学院代码),学院代码为外码

课程(课程号,课程名,学时)

学习(学号,课程号,成绩),学号为外码,课程号为外码

开课(教师号,课程号),教师号为外码,课程号为外码

2.对各表进行增加、删除、修改属性操作

添加操作:

对学生表添加出生日期字段,和家庭地址字段,教师表增加性别字段,出生日期字段,对课程表增加先修课程字段,并且先修课程为本关系外码。

删除操作:

删除学生表家庭地址字段,删除教师表出生日期字段

修改操作:

修改先课程表中先修课程字段名称为先修课程号,修改学生姓名字段,该字段值不允许取空值

3.建立索引

为学生表在学生姓名上建立名为sname-index的索引,在学院代码字段上建立名为dept-index,降序。

4.删除表操作

删除上述表,重新执行查询再次建立各表

5.利用ACCESS2003/2007完善各表的数据内容

二、实验目的

熟练掌握SQL的各种数据定义功能,包括

1.定义表的功能,包括主码和外码的定义

2.修改表的定义功能,包括增加属性,删除属性,修改属性类型

4.建立和删除索引操作,理解索引的作用

5.删除表功能

三、实验步骤及运行结果

(一)

1、建立学院表:

CREATETABLE学院

(学院代码CHAR(8)PRIMARYKEY,

学院名称CHAR(15));

2、建立学生表:

CREATETABLE学生

(学号CHAR(8)PRIMARYKEY,

姓名CHAR(15),

性别CHAR

(2),

学院代码CHAR(8),

FOREIGNKEY(学院代码)REFERENCES学院(学院代码));

3、建立教师表:

CREATETABLE教师

(教师号CHAR(8)PRIMARYKEY,

教师姓名CHAR(20),

学院代码CHAR(8),

FOREIGNKEY(学院代码)REFERENCES学院(学院代码));

4、建立课程表:

CREATETABLE课程

(课程号CHAR(8)PRIMARYKEY,

课程名CHAR(15),

学时SMALLINT);

5、建立学习表:

CREATETABLE学习

(学号CHAR(8),

课程号CHAR(8),

成绩SMALLINT,

PRIMARYKEY(学号,课程号),

FOREIGNKEY(学号)REFERENCES学生(学号),

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

6、建立开课表:

CREATETABLE开课

(教师号CHAR(8),

课程号CHAR(8),

PRIMARYKEY(教师号,课程号),

FOREIGNKEY(教师号)REFERENCES教师(教师号),

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

(二)

1、开课表增加属性:

ALTERTABLE开课ADD开课时间DATETIME;

2、学习表增加属性:

ALTERTABLE学习ADD任课教师号CHAR(8)

3、学生表增加属性:

ALTERTABLE学生ADD年龄SMALLINT;

4、学生表删除属性:

ALTERTABLE学生DROPCOLUMN年龄;

5、修改课程表属性:

ALTERTABLE课程ALTERCOLUMN课程名CHAR(20);

(三)

1、课程表建立索引:

CREATEUNIQUEINDEXCOU_IND_CNOON课程(课程号);

2、学生表建立索引:

CREATEUNIQUEINDEXSTU_IND_SNOON学生(学号);

3、学习表建立索引:

CREATEUNIQUEINDEXSC_IND_SNO_CNOON学习(学号,课程号);

(四)

1、建立临时表:

CREATETABLE临时表

(时间DATETIME,

姓名CHAR(15),

地点CHAR(15),

PRIMARYKEY(时间));

2、删除临时表:

DROPTABLE临时表CASCADE;

(五)

完善表内容之后,

运行结果:

学院表:

学院

学院代码

学院名称

1122

计算机学院

1123

化工学院

1124

文法学院

1125

外文学院

1126

体育学院

1127

信电学院

1128

环侧学院

学生表:

学生

学号

姓名

性别

学院代码

2100

孙策

1122

2101

赵子玉

1122

2102

高夏丽

1122

2103

孙晓峰

1123

2104

豆顺

1123

3100

张静静

1123

3101

武梦醒

1124

3102

禹贵

1124

3103

李明凯

1125

4100

杨柳

1125

4101

李阳

1126

4102

张恒

1126

4103

周浩

1127

4104

姚梦玲

1127

5100

王选

1128

5101

赵忠祥

1128

5102

陈天宇

1122

5103

吴浩天

1123

5104

陈圆圆

1124

教师表:

教师

教师号

教师姓名

学院代码

0001

马辉

1122

0002

邱理想

1123

0003

杜明新

1124

0004

罗慧芬

1125

0005

刘芳

1126

0006

蒋克福

1127

0007

鲍福萍

1128

0008

王敏

1128

0009

赵柯

1128

课程表:

课程

课程号

课程名

学时

5000

化学

48

5001

英语

55

5002

数据库

64

5003

数学

42

5004

物理

48

5005

生物

32

5006

体育

28

5007

美术

20

5008

音乐

24

学习表:

学习

学号

课程号

成绩

任课教师号

2100

5000

96

0001

2100

5001

87

0002

2100

5002

92

0002

2100

5003

76

0004

2100

5004

86

0005

2100

5005

78

0006

2100

5006

99

0007

2100

5007

56

2100

5008

64

2101

5003

85

0003

2102

5000

85

0001

2102

5003

55

0004

2102

5004

94

0004

2103

5000

90

0007

2103

5001

93

0001

2104

5005

62

0005

3100

5000

43

0001

3100

5001

82

0002

3101

5002

89

0003

3101

5004

95

0004

3101

5005

85

0006

3102

5002

44

0003

3103

5002

90

0002

3103

5006

91

0007

4100

5001

90

0002

4100

5002

91

0003

4100

5003

97

0003

4101

5000

93

0007

4101

5003

96

0003

4102

5002

82

0002

4102

5003

96

0004

4103

5004

78

0005

4103

5005

83

0005

4104

5004

87

0004

4104

5006

92

0007

5100

5002

93

0003

5100

5003

87

0003

5101

5003

93

0004

5101

5005

90

0005

5101

5006

87

0006

5102

5000

87

0007

5102

5001

55

0001

5103

5000

98

0001

5103

5001

88

0001

5103

5002

75

0002

5103

5003

95

0004

5103

5004

77

0005

5103

5005

96

0006

5103

5006

83

0006

5103

5007

51

5103

5008

74

开课表:

开课

教师号

课程号

0001

5000

0001

5001

0002

5001

0002

5002

0003

5002

0003

5003

0004

5004

0005

5004

0005

5005

0006

5005

0006

5006

0007

5000

0007

5007

0008

5007

0009

5008

四、实验体会

在建立查询的时候,要明确各表之间的联系,要正确指明每个表的主码和外码,这样之后,关系表中才会正确显示各表之间的联系。

另外,从这次实验中,我学到数据更新中“插入子查询结果”的好处,在修改查询编码后,我们可以用这个操作,来重新建表和保留原表中的有效记录(原表先重命名,在执行改后的查询,在编写一个插入子查询的编码,就可以向新表中插入原有数据了)。

实验二:

练习SQL数据操纵功能

一、实验内容及要求

1.求选修了某个老师上课的学生,成绩在90分以上的姓名、课程名称和成绩;

2.求选修了某个老师所授全部课程的学生姓名和学院名称;

3.求没有选修某门课程的学生学号和姓名;

4.求至少选修了两门课程的学生学号;

5.求某门课程不及格学生姓名和考试成绩

6.求至少选修了与某个同学选修的课程相同的学生学号

7.求至少选修了某两门课程的学生姓名和学院名称。

8.查询某个同学没有选修的课程号和课程名

9.查询没有被任何学生选修的课程的课程号

10.求选修了全部课程的学生姓名

11.查询各学院某门课程的平均分,并按照成绩从高到低的顺序排列。

12.查询选修数据库原理课程的学生姓名和所在院系,结果按各院系排列,同时成绩从高到低排列。

13.求学时在30-45之间(含30和45)的课程的课程号和课程名称及授课教师。

14.检索选修数据库原理课程的最高分学生的姓名

15.查询选课人数超过50(根据情况自己定人数)人的课程的课程号及课程名。

16.自行提出查询要求,内容包括并运算、差运算、交运算、笛卡儿积运算、连接运算、自然连接运算以及复杂统计表。

二、实验目的

使用SQL语句进行各种查询

1、熟练掌握单表查询,包括

(1)选择表中的若干列(投影)

(2)选择表中的若干元组(选择)(3)对查询结果排序(4)使用集函数(5)对查询结果分组

2、熟练掌握复杂查询,包括1)等值与非等值连接查询2)自身连接:

一个表与其自己进行连接。

3)外连接查询4)复合条件连接:

WHERE子句中可以有多个连接条件。

3、熟练掌握嵌套查询,包括1)带有IN谓词的子查询2)带有比较运算符的子查询(子查询一定要跟在比较符之后)3)带有ANY或ALL谓词的子查询(使用ANY和ALL时必须同时使用比较运算符)4)带有EXISTS谓词的子查询(查询结果不返回任何数据,只产生逻辑“真”或“假”)

4、使用SQL和ACCESS结合完成一些复杂的统计

三、实验步骤及运行结果

1、查询编码:

SELECT姓名,课程.课程号,成绩

FROM学生,课程,学习

WHERE成绩>90

AND学习.任课教师号=

(select教师号

from教师

where教师姓名='马辉')

AND学生.学号=学习.学号

and课程.课程号=学习.课程号;

运行结果:

查询1

姓名

课程号

成绩

孙策

5000

96

孙晓峰

5001

93

吴浩天

5000

98

2、查询编码:

SELECT姓名,学院名称

FROM学生,学院

WHERE学生.学院代码=学院.学院代码

andnotexists

(select*

from开课

where教师号='0001'

andnotexists

(select*

from学习

where学号=学生.学号

and课程号=开课.课程号));

运行结果:

查询2

姓名

学院名称

孙策

计算机学院

孙晓峰

化工学院

张静静

化工学院

陈天宇

计算机学院

吴浩天

化工学院

3、查询编码:

SELECT学号,姓名

FROM学生

WHEREnotexists

(select*

from学习

where课程号='5000'

and学生.学号=学习.学号);

运行结果:

查询3

学号

姓名

2101

赵子玉

2104

豆顺

3101

武梦醒

3102

禹贵

3103

李明凯

4100

杨柳

4102

张恒

4103

周浩

4104

姚梦玲

5100

王选

5101

赵忠祥

5104

陈圆圆

4、查询编码:

SELECT学号

FROM学习

GROUPBY学号

HAVINGcount(课程号)>=2;

运行结果:

查询4

学号

2100

2102

2103

3100

3101

3103

4100

4101

4102

4103

4104

5100

5101

5102

5103

5、查询编码:

SELECT学生.姓名,学习.成绩

FROM学生,学习

WHERE(((学生.学号)=学习.学号)And((学习.课程号)='5001')And((学习.成绩)<60));

运行结果:

查询5

姓名

成绩

陈天宇

55

6、查询编码:

SELECTDISTINCTB.学号

FROM学习ASA,学习ASB

WHEREA.课程号=B.课程号AndA.学号='2103';

运行结果:

查询6

学号

2100

2102

2103

3100

4100

4101

5102

5103

7、查询编码:

SELECT姓名,学院名称

FROM学生,学院

WHERE学生.学院代码=学院.学院代码

and学号in

(selectA.学号

from学习asA,学习asB

whereA.学号=B.学号

AndA.课程号='5000'

AndB.课程号='5001'

GROUPBYA.学号);

运行结果:

查询7

姓名

学院名称

孙策

计算机学院

孙晓峰

化工学院

张静静

化工学院

陈天宇

计算机学院

吴浩天

化工学院

8、查询编码:

SELECT课程号,课程名

FROM课程

WHERE课程号notin

(select课程号

from学习,学生

where学生.学号=学习.学号

and姓名='张静静');

运行结果:

查询8

课程号

课程名

5002

数据库

5003

数学

5004

物理

5005

生物

5006

体育

5007

美术

5008

音乐

9、查询编码:

SELECT课程号

FROM课程

WHERE课程号notin

(select课程号

from学习);

运行结果:

查询9

课程号

10、查询编码:

SELECT姓名

FROM学生

WHEREnotexists(select*from课程wherenotexists(select*from学习where学号=学生.学号and课程号=课程.课程号));

运行结果:

查询10

姓名

孙策

吴浩天

11、查询编码:

SELECT课程号,avg(成绩)AS平均分

FROM学习

GROUPBY课程号

ORDERBYavg(成绩)DESC;

运行结果:

查询11

课程号

平均分

5006

90.4

5003

86.6666666666667

5004

86.166********67

5000

84.5714285714286

5001

82.5

5005

82.3333333333333

5002

82

5008

69

5007

53.5

12、查询编码:

SELECT姓名,成绩AS数据库成绩,学院名称

FROM学习,课程,学生,学院

WHERE学习.课程号=课程.课程号And学生.学号=学习.学号And学生.学院代码=学院.学院代码And课程.课程名='数据库'

ORDERBY学院名称,成绩DESC;

运行结果:

查询12

姓名

数据库成绩

学院名称

吴浩天

75

化工学院

王选

93

环侧学院

孙策

92

计算机学院

张恒

82

体育学院

杨柳

91

外文学院

李明凯

90

外文学院

武梦醒

89

文法学院

禹贵

44

文法学院

13、查询编码:

SELECT课程.课程号,课程名,教师姓名

FROM课程,开课,教师

WHERE课程.课程号=开课.课程号And教师.教师号=开课.教师号And学时Between30And45;

运行结果:

查询13

课程号

课程名

教师姓名

5003

数学

杜明新

5005

生物

刘芳

5005

生物

蒋克福

14、查询编码:

SELECT姓名

FROM学生,学习,课程

WHERE学生.学号=学习.学号

and学习.课程号=课程.课程号

and课程.课程名='数据库'

and学习.成绩>=all

(select成绩

from学习,课程

where课程.课程号=学习.课程号

and课程.课程名='数据库');

运行结果:

查询14

姓名

王选

15、查询编码:

SELECT课程号,课程名

FROM课程

WHERE课程号in

(SELECT课程.课程号

FROM学习,课程

WHERE学习.课程号=课程.课程号

GROUPBY课程.课程号

HAVINGcount(*)>5);

运行结果:

查询15

课程号

课程名

5000

化学

5001

英语

5002

数据库

5003

数学

5004

物理

5005

生物

四、实验体会

从这次实验中,我认识到查询编码是需要下功夫掌握的,自己在编码时,在很多问题上要花很长时间思考。

要熟练的掌握和运用各类查询语句,并灵活应用是要继续努力。

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

当前位置:首页 > PPT模板 > 可爱清新

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

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