数据结构实验报告完整版文档格式.docx
《数据结构实验报告完整版文档格式.docx》由会员分享,可在线阅读,更多相关《数据结构实验报告完整版文档格式.docx(28页珍藏版)》请在冰豆网上搜索。
3.建立两个试验用数据库,使用企业管理器和查询分析器对数据库和表进行基础操作。
二、试验预习内容
在认真阅读教材及试验指导书基础上,上机前请预习以下内容,并在空白处填写对应步骤或命令。
1.熟悉SQLSERVER运行环境,练习服务器基础操作:
打开、停止、关闭。
2.使用SQLSERVER中企业管理器完成以下任务。
数据库名称:
STC
表:
STU(snochar(9),snamevarchar(50),ssexchar
(2),sageint,sdeptchar
(2));
COUTSES(cnochar(3),cnamevarchar(50),cpnochar(3),creditint);
SC(snochar(9),cnochar(3),gradeint);
说明:
以上为表结构,以snochar(9)为例,说明sno属性设置为字符类型,宽度为9,int指整型数据。
1)建立数据库STC,分别建立以上三张表,并完成数据录入。
(表结构及数据参见教材)
2)分析并建立各表主码,用下划线在上面表结构中标出主码。
3)建立各表之间关联,请简述操作步骤。
以下是各表数据及各表主码:
1.STU表:
2.COUTSES表;
3SC表:
建立各表关联:
4)参考试验指导书【第5章数据库备份和还原】,使用企业管理器对数据库STC进行备份,并尝试在个人电脑与机房电脑上进行还原,请简述备份、还原操作步骤。
1.备份:
2.还原:
3.在SQLSERVER查询分析器中使用SQL语言完成以下任务。
参考试验指导书《数据库系统试验指导教程》【试验1.1数据定义】,建立数据库SCHOOL,分别建立students、teachers、courses、choices四张表,表结构见试验指导书P236【附录A】。
1)用SQL语言创建数据库、建表。
建表时为各表建立关键字、设置外码,数据暂不录入,请写出对应SQL命令。
createdatabaseSCHOOL
creatTABLEstudents
(sidchar(10)primarykey,
snamechar(30)notnull,
emailchar(30),
gradeint,
);
createTABLEteachers
(tidchar(10)primarykey,
tnamechar(30)notnull,
salaryint,
createTABLEcourses
(cidchar(10)primarykey,
cnamechar(30)notnull,
hourint,
createTABLEchoices
(nointprimarykey,
sidchar(10),
tidchar(10),
cidchar(10),
scoreint,
FOREIGNKEY(sid)REFERENCESstudents(sid),
FOREIGNKEY(tid)REFERENCESteachers(tid),
FOREIGNKEY(cid)REFERENCEScourses(cid),
2)为students表、courses建立按主键増序排列索引,请写出对应SQL命令。
createindexssidonstudents(sidasc)
createindexccidoncourses(cidasc)
3)删除course上索引,请写出对应SQL命令。
dropindexcourses.ccid
4)在SCHOOL数据库中students表中增加一个“出生日期”字段,类型为日期时间型,请写出对应SQL命令。
alterTABLEstudentsADD出生日期DATETIME
5)删除students中“出生日期”字段,请写出对应SQL命令。
alterTABLEstudentsDROPCOLUMN出生日期
6)删除SCHOOL数据库中students表,请写出对应SQL命令。
AlterTABLEchoises
dropFK_CHOICES_STUDENTS
DROPTABLEstudents
4.使用企业管理器创建数据库SCHOOL,实现内容与试验预习内容3完全相同。
1)创建数据库、建表。
建表时为各表建立关键字、设置外码,数据暂不录入
建立表,以及主码,外码
2)为students表、courses建立按主键増序排列索引:
3)删除course上索引:
4)在SCHOOL数据库中students表中增加一个“出生日期”字段,类型为日期时间型:
5)删除students中“出生日期”字段:
6)删除SCHOOL数据库中students表
5.使用企业管理器,将SCHOOL数据库分离出MSSQLSERVER,请简述步骤。
6.使用企业管理器,使用【数据库/全部任务/附加数据库】将SCHOOL数据库添加进SQLSERVER,并查看数据。
7.使用查询分析器,删除数据库STC,请写出对应SQL命令。
dropdatabaseSTC
8.结束此次试验
三、试验课后训练
1.使用企业管理器练习数据导入导出。
1)将SCHOOL数据库students表中数据导出到STC数据库对应stu表中;
2)向STC数据库courses表导入SCHOOL数据库courses表中数据;
3)自行练习试验指导书【试验5.3SQLSERVER数据库导入与导出】部分;
1:
从school数据库中students表中数据导出到文本文件Learner中:
2:
将文本文件Learner中数据导入到school数据库中students表中
2.自行练习试验指导书【试验1.1数据定义】部分。
四、
试验汇报
1.简述此次试验所用到SQL命令及其功效。
createdatabase<
名称>
创建数据库
creatTABLE<
表名>
(<
列名>
<
数据类型>
[列级完整性约束条件]
[,<
[列级完整性约束条件]]
表级完整性约束条件>
])
创建基础表
createindex<
主属性>
on<
(主属性asc(desc))
为表建立按主键増序(降序)排列索引
AlterTABLE<
表B>
drop(B与A外码约束)
DROPTABLE<
表A>
删除数据库中A表
2.在MSSQLSERVER中数据库“分离|添加”与“备份|还原”是相同功效吗?
是不一样功效,“分离/添加”会使数据库数量改变,而“备份|还原”不会改变。
3.试验总结(试验过程中出现问题、处理方法、结果怎样或其它)
经过此次试验,知道了基础sql命令及其功效,同时也初步包含到了SQL语言。
在试验过程中也碰到了部分问题,比如在一开始没有打开服务器直接进入企业管理器,半天链接不上。
创建表后,录入数据后找不到怎样保留数据,原来系统会自己存放,录入数据后直接关闭就能够了。
导入数据时,最终总是不记得选择要导入表,直接就导入了。
试验二——SQL语句
1.熟悉SQL数据查询语言,能使用SQL进行单表查询、连接查询、嵌套查询、集合查询和统计查询,能了解空值处理;
2.熟悉数据库数据更新操作,能使用SQL语句对数据库进行数据插入、更新、删除操作;
3.熟悉SQL支持相关视图操作,能创建、查询及取消视图;
4.了解NULL在数据库中特殊含义,掌握使用SQL进行与空值相关操作;
在认真阅读教材及试验指导书【试验1.2数据查询】、【试验1.3数据更新】、【试验1.4视图】和【试验1.6空值和空集处理】基础上,上机前请预习以下内容,并在空白处填写对应步骤或命令。
1.使用SCHOOL数据库,在SQLSERVER查询分析器中使用SQL语言完成以下操作。
请在空白处填写对应SQL命令。
1)查询年级为全部学生名称,按编号次序排列;
SELECTsname
fromSTUDENTS
WHEREgrade=
ORDERBYsidDESC
2)查询全部课程名称中含有data课程编号;
SELECTCID
FROMCOURSES
WHERECNAMELIKE'
%data%'
3)统计全部老师平均工资
SELECTAVG(SALARY)
FROMTEACHERS
4)查询最少选了3门课学生编号;
SELECTsid
FROMCHOICES
GROUPBYsid
HAVINGCOUNT(sid)>
5)查询学号为80009026学生姓名、所选课名及成绩;
SELECTSTUDENTS.SNAME,COURSES.CNAME,CHOICES.SCORE
FROMSTUDENTS,COURSES,CHOICES
WHERESTUDENTS.sid=ANDSTUDENTS.sid=CHOICES.sidANDCOURSES.cid=CHOICES.cid
6)查询没有学生选课程编号;
SELECTcid
WHERECIDNOTIN(SELECTCIDFROMCHOICES)
7)查询既选了C++又选了Java课程学生编号;
SELECTX.sid
FROMCHOICESASX,CHOICESASY
WHERE(X.cid=(SELECTcidfromcourseswherecname='
C++'
)ANDY.cid=(SELECTcidfromcourseswherecname='
JAVA'
))
ANDX.sid=Y.sid
8)查询选了C++但没选Java课程学生编号;
)AND
Y.cidIN(SELECTcidfromcourseswherecname<
>
'
))ANDX.sid=Y.sid
9)向STUDENTS表中插入“LiMing”个人信息(编号:
名字:
LiMing,Email:
年级:
1992);
INSERT
INTOSTUDENTS(sid,sname,email,grade)
VALUES('
'
liMing'
1992'
10)将“LiMing”年级改为;
UPDATEstudents
SETgrade=
WHEREsname='
LiMing'
;
11)删除全部选了Java课程学生选课统计;
DELETE
FROMchoices
wherecid=(selectcidfromcourses
wherecname='
Java'
12)求出每门课课程号、选课人数,结果存入数据库表T1中。
createtableT1(
cidchar(10),
mint
)
insert
intoT1(cid,m)
selectcourses.cid,count(sid)
fromcoursesleftjoinchoicesoncourses.cid=choices.cid
groupbycourses.cid
selectdistinct*
fromT1
orderbycidasc
13)查询全部选课统计成绩并换算为五分制(注意NULL情况);
selectsid,tid,cid,score/20score
fromchoices
14)查询成绩小于0选课统计,统计总数、平均分、最大值和最小值(注意查询结果中NULL情况);
selectcount(*),avg(a.score),max(a.score),min(a.score)
from(select*fromchoiceswherescore<
60)a
15)按成绩次序排序显示CHOICES表中全部统计。
(使用ORDERBY排序,注意NULL情况);
select*
orderbyscore
16)创建视图V1,显示学生姓名、所选课名称、任课老师名;
createVIEWV1(sname,cname,tname)
AS
SELECTsname,tname,cname
fromstudents,teachers,courses,choices
wherestudents.sid=choices.sidandteachers.tid=choices.tidandcourses.cid=choices.cid
17)取消V1视图;
DROPVIEWV1
使用STC数据库,在SQLSERVER查询分析器中使用SQL语言完成以下操作。
请在空白处填写对应SQL命令或其它内容。
1)创建视图V2,显示计算机(CS)系学生信息;
(结合下面b)小题,V2视图创建2次,分别使用/不使用WITHCHECKOPTION选项)
(1)不加WITHCHECKOPTION
(2)加WITHCHECKOPTION
CREATEVIEWV2
SELECT*
FROMSTUDENTS;
WHEREsdept=’CS’;
FROMSTUDENTS
WITHCHECKOPTION;
2)插入元组(99999,张三,20岁,男,PH)到V2中,运行结果怎样?
(观察WITHCHECKOPTION对结果影响);
(1)不加WITHCHECKOPTION结果
(2)加WITHCHECKOPTION结果
INTOV2
99999'
张三'
男'
20'
PH'
命令已成功完成。
(所影响行数为1行)
试图进行插入或更新已失败,原因是目标视图或者目标视图所跨越某一视图指定了WITHCHECKOPTION,而该操作一个或多个结果行又不符合CHECKOPTION约束条件。
语句已终止。
3)在V2基础上,查询全部计算机系女生信息;
SELECT*
FROMV2
WHERESSEX='
女'
2.结束此次试验
1.掌握SQLSERVER中流控制语句及其它常见编程语句;
1)使用查询分析器,编写代码,输出乘法口诀表。
2.自行练习试验指导书P24【试验1.2数据查询】1.2.5自我实践部分;
(1)查询全部课程具体统计;
fromcourses
(2)查询全部有选修课学生编号;
selectsid
(3)查询课时<
88(小时)课程编号;
selectcid
wherehour<
88
(4)请找出总分超出400分学生;
selectsid,sum(score)
groupbysid
havingsum(score)>
400
3.自行练习试验指导书P30【试验1.3数据更新】1.3.5自我实践部分;
4.自行练习试验指导书P36【试验1.4视图】1.4.5自我实践部分;
5.自行练习试验指导书P49【试验1.6空值和空集处理】1.6.5自我实践部分;
1.SQLSERVER中变量申明命令是什么?
输出命令是什么?
变量申明:
declare@变量名变量类型
输出:
SETSERVEROUT[PUT]ON
2.SQLSERVER中实现分支和循环语句分别是什么?
循环:
while(条件--只能是表示式)
语句或语句块
[break]--强制退出
分支:
case
when条件1then结果1
when条件2then结果2
[else其她结果]
end
3.在SQLSERVER里使用ORDERBY排序时,NULL值怎样处理?
使用GROUPBY分组时,NULL值又怎样处理?
4.当使用orderby排序时,SQL中是将NULL默认为无穷小,当使用groupby分组时,SQL中是将NULL作为与该字段内其她数据类型相同依旧为NULL数据进行分类统计
2.试验总结(试验过程中出现问题、处理方法、结果怎样或其它)
此次试验中碰到了很多问题,在求出每门课课程号、选课人数,结果存入数据库表T1这题中,没有使用做连接,这么,因为前一题删除了选了JAVA学生统计,造成查结果中缺乏了统计。
在包含NULL题目中,均加上了‘<
NULL’条件,以后才知道不用加,null不参与计数。