第一学期计算机软件数据库原理》实验.docx
《第一学期计算机软件数据库原理》实验.docx》由会员分享,可在线阅读,更多相关《第一学期计算机软件数据库原理》实验.docx(49页珍藏版)》请在冰豆网上搜索。
第一学期计算机软件数据库原理》实验
合肥师范学院
实验报告册
2014/2015学年第1学期
系别
计算机学院
实验课程
数据库原理
专业
计算机科学与技术
班级
专升本班
姓名
蔡圆圆
学号
1410211014
指导教师
李宜兵
实验名称
课时
实验报告成绩
实验
(一)——数据库基本操作
2
实验
(二)——SQL语句
6
实验(三)——数据库完整性与安全性实验
4
实验(四)——数据库编程
4
备注:
实验一——数据库基本操作
一、实验目的
1.熟悉MSSQLSERVER运行界面,掌握服务器的基本操作。
2.掌握界面操作方法完成用户数据库建立、备份和还原。
3.建立两个实验用的数据库,使用企业管理器和查询分析器对数据库和表进行基本操作。
二、实验预习内容
在认真阅读教材及实验指导书的基础上,上机前请预习以下内容,并在空白处填写相应的步骤或命令。
1.熟悉SQLSERVER2000的运行环境,练习服务器基本操作:
打开、停止、关闭。
2.使用SQLSERVER2000中的企业管理器完成以下任务。
数据库名称:
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)分析并建立各表的主码,用下划线在上面表结构中标出主码。
createtableSTU
(snochar(9)primarykey,
snamechar(50),
ssexchar
(2),
sageint,
sdeptchar
(2),
)
createtableCOURSE
(cnochar(3)primarykey,
cnamevarchar(50),
cpnochar(3),
creditint
)
createtableSC
(snochar(9)primarykey,
cnochar(3),
gradeint
)
3)建立各表之间的关联,请简述操作步骤。
SC表中foreignkey(cno)referencesCOURSE(cno)
foreignkey(sno)referencesSTU(sno)
4)参考实验指导书的【第5章数据库的备份和还原】,使用企业管理器对数据库STC进行备份,并尝试在个人电脑与机房电脑上进行还原,请简述备份、还原操作的步骤。
备份:
选择要备份数据库——》右键所有任务——》备份数据库——弹出菜单中选择“添加按钮”——》填写备份文件名称和备份地址
还原:
选择要备份数据库——》右键所有任务——》还原数据库——》“从设备”——》“添加”——》选择要还原的文件
3.在SQLSERVER2000的查询分析器中使用SQL语言完成以下任务。
参考实验指导书《数据库系统实验指导教程》【实验1.1数据定义】,建立数据库SCHOOL,分别建立students、teachers、courses、choices四张表,表结构见实验指导书P236【附录A】。
1)用SQL语言创建数据库、建表。
建表时为各表建立关键字、设置外码,数据暂不录入,请写出对应的SQL命令。
CREATEDATABASESCHOOL
(一)创建学生表
createtablestudents
(sidchar(10)primarykey,
snamechar(30)notnull,
emailchar(30),
gradeint
)
(二)创建教师表
createtableteachers
(tidchar(10)primarykey,
tnamechar(30)notnull,
emailchar(30),
salaryint
)
(三)创建课程表
createtablecourses
(cidchar(10)primarykey,
cnamechar(30),
hourint
)
(四)创建选课表
字段与关键字重名用中括号
createtablechoices
([no]intprimarykey,
sidchar(10)notnull
foreignkey(sid)referencesstudents(sid),
tidchar(10)notnull
foreignkey(tid)referencesteachers(tid),
cidchar(10)notnull
foreignkey(cid)referencescourses(cid),
scoreint
)
2)为students表、courses建立按主键増序排列的索引,请写出相应的SQL命令。
createindexsidonstudents(sidasc)
createindexcidoncourses(cidasc)
3)删除course上的索引,请写出相应的SQL命令。
dropindexcourses.cid
4)在SCHOOL数据库中的students表中增加一个“出生日期”字段,类型为日期时间型,请写出对应的SQL命令。
altertablestudents
add"出生日期"datetime
5)删除students中的“出生日期”字段,请写出对应的SQL命令。
altertablestudents
dropcolumn"出生日期"
6)删除SCHOOL数据库中的students表,请写出对应的SQL命令。
altertablechoicesdropFK__choices__sid__0DAF0CB0
droptablestudents
4.使用企业管理器创建数据库SCHOOL,实现内容与实验预习内容3完全相同。
选中“数据库”右击——》“新建数据库”——》填写“数据库名称”——》在“数据库文件”对话框中修改文件相关信息和存放地址
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数据库的导入与导出】部分;
2.自行练习实验指导书【实验1.1数据定义】部分。
四、
实验报告
1.简述本次实验所用到的SQL命令及其功能。
创建数据库:
createdatabase<名称>
创建表:
createtable<表名>
创建索引:
createindex<主属性>on<表名>
删除索引:
dropindex<索引名>
修改表:
altertable
删除表:
droptable
2.在MSSQLSERVER中数据库的“分离|添加”与“备份|还原”是相同的功能吗?
备份、还原是一对;分离、附加是一对。
备份的话当前数据库还存在,只是备份了一份;
分离的话当前的库和这个被分离的数据库就没关系了。
备份时可选完全,也可选差异。
差异是距上
次备份的差异,这样生成的文件会小些。
“分离数据库”试用范围广,无论到那个SQLServer的版本上都能附加上去,而“备份数据库”只能是那个版本的SQLServer备份的,就要用那个版本的还原才行。
还原的话要求当前必须有这个数据库,完全备份的还原,只要有库名即可做还原。
还原后物理文件存放在你新创建的这个数据库的物理位置上;差异备份的还原,需要和上次备份时的源数据库状态一致。
附加数据库,一选数据库的物理存放位置,库就进入数据库管理了,物理位置指向所选的附加数据库。
可以认为分离、附加是一种指针操作;备份、还原则更为复杂一些,备份的产物与当前数据库无关,还原成功后文件也可以删除。
附加数据库是附加已分离的数据库文件,备份是对本
机服务器里面的数据进行备份,还原数据库是还原已备份的数据库文件。
3.实验总结(实验过程中出现的问题、解决方法、结果如何或其它)
问题:
SQL的使用不熟悉
查询语句不知道怎么写
语句的书写规则出现问题
解决方法:
求助于同学、课本、网络
结果:
大部分遇到的问题已解决,但是编程能力差的问题短时间内无法取得大的进步。
实验二——SQL语句
一、实验目的
1.熟悉SQL的数据查询语言,能使用SQL进行单表查询、连接查询、嵌套查询、集合查询和统计查询,能理解空值的处理;
2.熟悉数据库的数据更新操作,能使用SQL语句对数据库进行数据的插入、更新、删除操作;
3.熟悉SQL支持的有关视图的操作,能创建、查询及取消视图;
4.了解NULL在数据库中的特殊含义,掌握使用SQL进行与空值相关的操作;
二、实验预习内容
在认真阅读教材及实验指导书【实验1.2数据查询】、【实验1.3数据更新】、【实验1.4视图】和【实验1.6空值和空集的处理】的基础上,上机前请预习以下内容,并在空白处填写相应的步骤或命令。
1.使用SCHOOL数据库,在SQLSERVER2000的查询分析器中使用SQL语言完成以下操作。
请在空白处填写相应的SQL命令。
1)查询年级为2001的所有学生的名称,按编号顺序排列;
useschool
selectsname
fromSTUDENTS
wheregrade=2001
orderbysidasc(asc可省略)
2)查询所有课程名称中含有data的课程编号;
selectcid
fromCOURSES
WHEREcnamelike'%data%'
3)统计所有老师的平均工资;
selectavg(salary)平均工资
fromteachers
4)查询至少选了3门课的学生编号;
selectsid
fromchoices
groupbysid
havingcount(cid)>=3
查询结果:
5)查询学号为80009026的学生的姓名、所选课名及成绩;
selectstudents.sname,ame,choices.score
fromstudents,courses,choices
wherestudents.sid=800009026andstudents.sid=choices.sidandcourses.cid=choices.cid
6)查询没有学生选的课程编号;
selectcid
fromcourses
wherecidnotin
(
selectcidfromchoices
wherechoices.cid=courses.cid
)
7)查询既选了C++又选了Java课程的学生编号;
selectsid
fromchoices,courses
wherechoices.cid=courses.cidandcname='c++'andsidin
(selectsid
fromchoices,courses
wherechoices.cid=courses.cidandcname='java'
)
8)查询选了C++但没选Java课程的学生编号;
选课表中选修了java的课程号的学号,不是选修了c++课程的学生学号
selectsid
fromchoices,courses
wherechoices.cid=courses.cidandcname='c++'andsidnotin
(selectsid
fromchoices,courses
wherechoices.cid=courses.cidandcname='java'
)
9)向STUDENTS表中插入“LiMing”的个人信息(编号:
700045678,名字:
LiMingEmail:
LX@,年级:
1992);
insert
intostudents(sid,sname,email,grade)
values('700045678','LiMing','LX@',1992)
10)将“LiMing”的年级改为2002;
updatestudents
setgrade=2002
wheresname='LiMing'
11)删除所有选了Java课程的学生选课记录;
delete
fromCHOICES
wherecidin(
selectcidfromCOURSES
wherecname='java')
(所影响的行数为6110行)
12)求出每门课的课程号、选课人数,结果存入数据库表T1中。
(1)建表:
createtableT1
(
cidchar(10)primarykey,
numberint
)
(2)插入数据:
insertintoT1(cid,number)
selectcid,count(distinctsid)
fromchoices
groupbycid
(所影响的行数为49行)
13)查询所有选课记录的成绩并换算为五分制(注意NULL的情况);
select[no],sid,tid,cid,score/20五分制分数
fromchoices
14)查询成绩小于60的选课记录,统计总数、平均分、最大值和最小值(注意查询结果中NULL的情况);
(1)查询成绩小于60的选课记录
select*
fromchoices
wherescore<60
(2)使用聚集函数:
selectsum(score)总分数,avg(score)平均分,max(score)最大值,min(score)最小值
fromchoices
wherescore<60
--groupbysid
(3)针对每位学生的:
selectsid学号,sum(score)总分数,avg(score)平均分,max(score)最大值,min(score)最小值
fromchoices
wherescore<60
groupbysid
15)按成绩顺序排序显示CHOICES表中所有记录。
(使用ORDERBY排序,注意NULL的情况);
(1)升序:
select*
fromchoices
orderbyscoreasc
null值排在最上方
(2)降序:
null值排在最下方,最上方值最大
16)创建视图V1,显示学生姓名、所选课名称、任课教师名;
(1)方法1:
createviewV1(sname,cname,tname)
as
selectsname学生名,cname课程名,tname教师名
fromstudentsjoinchoicesonstudents.sid=choices.sid
joincoursesoncourses.cid=choices.cid
jointeachersonteachers.tid=choices.tid
((所影响的行数为293440行))
(3)方法2:
createviewV1(sname,cname,tname)
as
selectsname学生名,cname课程名,tname教师名
fromstudents,choices,teachers,courses
wherestudents.sid=choices.sidandcourses.cid=choices.cidandteachers.tid=choices.tid
select*
fromV1
17)取消V1视图;
dropviewV1
(命令已成功完成。
)
2.使用STC数据库,在SQLSERVER2000的查询分析器中使用SQL语言完成以下操作。
请在空白处填写相应的SQL命令或其它内容。
1)创建视图V2,显示计算机(CS)系学生信息;(结合下面的b)小题,V2视图创建2次,分别使用/不使用WITHCHECKOPTION选项)
(1)不加WITHCHECKOPTION
(2)加WITHCHECKOPTION
createviewV2
as
select*
fromstu
wheresdept='cs'
select*
fromV2
createviewV1
as
select*
fromstu
wheresdept='cs'
withcheckoption
2)插入元组(99999,张三,20岁,男,PH)到V2中,运行结果如何?
(观察WITHCHECKOPTION对结果的影响);
(1)不加WITHCHECKOPTION的结果
(2)加WITHCHECKOPTION的结果
insert
intoV2
values(99999,'张三','男',20,'PH')
(所影响的行数为1行)
插入成功:
insert
intoV1
values(88888,'张四','男',20,'PH')
结果:
插入不成功
3.在V2基础上,查询所有计算机系女生信息;
select*
fromV2
wheressex='女'
4.结束本次实验
三、实验课后训练
1.掌握SQLSERVER中流控制语句及其它常用编程语句;
1)使用查询分析器,编写代码,输出乘法口诀表。
2.自行练习实验指导书P24【实验1.2数据查询】1.2.5自我实践部分;
3.自行练习实验指导书P30【实验1.3数据更新】1.3.5自我实践部分;
4.自行练习实验指导书P36【实验1.4视图】1.4.5自我实践部分;
5.自行练习实验指导书P49【实验1.6空值和空集的处理】1.6.5自我实践部分;
6.
实验报告
7.SQLSERVER中变量声明的命令是什么?
输出命令是什么?
变量声明:
Declare
输出命令:
Print
8.SQLSERVER中实现分支和循环的语句分别是什么?
循环语句:
while
分支语句:
case
9.在SQLSERVER里使用ORDERBY排序时,NULL值如何处理?
使用GROUPBY分组时,NULL值又如何处理的?
升序排列:
null值默认排在最前
降序排列:
null值默认排在最后
10.实验总结(实验过程中出现的问题、解决方法、结果如何或其它)
问题:
基础知识薄弱、实验动手能力差、语句编写的规则不清楚
解决:
翻阅课本和笔记、询问同学、求助于互联网
结果:
题目做出来了,仍觉得编程的能力需要加强练习。
11.
实验三——数据库完整性与安全性
一、实验目的
1.理解实体完整性、参照完整性、用户自定义完整性的概念,学习三类完整性的实现,了解违反完整性的结果;
2.掌握MSSQLSERVER中的有关用户登录认证及管理方法,熟练使用自主存取控制进行权限管理;
二、实验预习内容
在认真阅读教材及实验指导书【2.1实体完整性】、【2.2参照完整性】、【2.3用户自定义完整性】、【2.4触发器】、【2.5综合案例】和【3.1用户标识与鉴别】、【3.2自主存取控制】、【3.3视图机制在自主存取控制上的应用】、【3.4Public角色在安全性中的应用】、【3.8综合案例】的基础上,上机前请预习以下内容,并在空白处填写相应的步骤或命令。
1.使用SCHOOL数据库
1)创建一张新表CLASS,包括Class_id(varchar(4)),Name(varchar(10)),Department(varchar(20))三个属性列,其中Class_id为主码;
createtableClass
(
Class_idvarchar(4)primarykey,
Namevarchar(10),
Departmentvarchar(20)
)
select*
fromclass
截图如下:
2)执行两次相同的插入操作(’0001’,’01csc’,’cs’),结果如何;
insertintoclass
values('0001','01csc','cs')
第一次插入:
(所影响的行数为1行)
第二次插入:
2.使用SQL命令创建一张学生互助表,要求:
包括学生编号、学生姓名、学生帮助对象的编号,每个学生有且仅有一个帮助对象,帮助的对象必须是已存在的学生。
createtableStu_Help
(
sidchar(10)primarykey,
snamechar(10),
objectidchar(10)unique,
foreignkey(sid)referencesStudents(sid),
foreignkey(objectid)referencesStudents(sid)
)
若表已建立,使用以下方法添加约束:
altertableStu_Help
addconstraintc1foreignkey(objectid)referencesStudents(sid