数据库实验报告一.docx
《数据库实验报告一.docx》由会员分享,可在线阅读,更多相关《数据库实验报告一.docx(16页珍藏版)》请在冰点文库上搜索。
数据库实验报告一
《数据库原理》实验报告
实验一:
数据库和表的创建与管理
实验二:
基本表的数据操作
学号
姓名
班级
日期
2013302534
杨添文
10011303
2015.10.5
实验一:
数据库和表的创建与管理
1、实验内容
1.利用图形用户界面创建,备份,删除和还原数据库和数据表(50分,每小题5分)
●数据库和表的要求(第四版教材第二章习题5要求的数据库)
●完成以下具体操作:
(1)创建SPJ数据库,初始大小为10MB,最大为50MB,数据库自动增长,增长方式是按5%比例增长;日志文件初始为2MB,最大可增长到5MB,按1MB增长。
数据库的逻辑文件名和物理文件名均采用默认值。
(2)在SPJ数据库中创建如图2.1-图2.4的四张表(只输入一部分数据示意即可)。
(3)备份数据库SPJ(第一种方法):
备份成一个扩展名为bak的文件。
(提示:
最好先删除系统默认的备份文件名,然后添加自己指定的备份文件名)
(4)备份数据库SPJ(第二种方法):
将SPJ数据库定义时使用的文件(扩展名为mdf,ldf的数据文件、日志文件等)复制到其他文件夹进行备份。
(5)删除已经创建的工程项目表(J表)。
(6)删除SPJ数据库。
(可以在系统默认的数据存储文件夹下查看此时SPJ数据库对应的mdf,ldf文件是否存在)
(7)利用备份过的bak备份文件还原刚才删除的SPJ数据库。
(还原数据库)
(8)利用备份过的mdf,ldf的备份文件还原刚才删除的SPJ数据库。
(附加)
(9)将SPJ数据库的文件大小修改为100MB。
(10)修改S表,增加一个联系电话的字段sPhoneNo,数据类型为字符串类型。
利用图形用户界面创建的表如下图所示:
修改后的s表如下图所示:
2、利用SQL语言创建和删除数据库和数据表(50分,每小题5分)
●完成以下具体操作:
(1)用SQL语句创建如图2.5-图2.7要求的数据库Student,初始大小为20MB,最大为100MB,数据库自动增长,增长方式是按10M兆字节增长;日志文件初始为2MB,最大可增长到5MB,按1MB增长。
数据库的逻辑文件名和物理文件名,日志文件名请自定义。
createdatabasestudenton
(
name='student',
filename='E:
\数据库实验\实验一\student.mdf',
size=20mb,
maxsize=100mb,
filegrowth=10mb
)
logon
(
name='student_log',
filename='E:
\数据库实验\实验一\student.ldf',
size=2mb,
maxsize=5mb,
filegrowth=1mb
)
(2)用SQL语句创建上述的三张表,各个字段的数据类型请自己确定,每张表只要有主键约束即可,不要其他约束。
不用输入数据。
createtables
(
snochar(9)primarykey,
snamechar(5),
ssexchar
(2),
sbirthchar(20),
sdeptchar(10)
)
createtablesc
(
snochar(9),
cnochar(5),
gradeint,
primarykey(sno,cno)
)
createtablec
(
cnochar(5)primarykey,
cnamechar(10),
cpnochar(5),
ccreditchar(5)
)
(3)用SQL中的backup语句将数据库Student备份到一个bak文件。
backupdatabasestudent
todisk='E:
\数据库实验\实验一\student.bak'
(4)用SQL语句删除创建的表。
droptables,sc,c
(5)将SPJ数据库定义时使用的文件(扩展名为mdf,ldf的数据文件、日志文件等)复制到其他文件夹进行备份(复制)后,用SQL语句删除创建的数据库。
dropdatabasestudent
(6)用SQL中的sp_attache_db语句完成对数据库Student的附加。
(通过该方式完成数据库的恢复时,使用的备份文件是第5)小题中备份好的数据文件、日志文件等,具体用法:
execsp_attache_db)
EXECsp_attach_db@dbname='student',
@filename1='E:
\数据库实验\student.mdf',
@filename2='E:
\数据库实验\student.ldf'
(7)先删除SPJ库,再用SQL中的restore语句还原刚才备份的数据库Student。
restoredatabasestudent
fromdisk='E:
\数据库实验\实验一\student.bak'
(8)用SQL语言修改数据库Student,给Student数据库添加一个文件组TestFG1,然后将两个5MB的文件添加到该文件组。
1、/*添加文件组*/
alterdatabasestudent
addfilegroupTestFG1
2、/*将文件f1.ndf添加到文件组*/
alterdatabasestudent
addfile
(
name=f1,
filename='E:
\数据库实验\实验一\f1.ndf',
size=5mb
)
tofilegroupTestFG1
3、/*将文件f2.ndf添加到文件组*/
alterdatabasestudent
addfile
(
name=f2,
filename='E:
\数据库实验\实验一\f2.ndf',
size=5mb
)
tofilegroupTestFG1
(9)修改S表,增加一个表示联系电话的字段sPhoneNo,数据类型为字符串类型。
altertableSaddsPhoneNochar(20)
(10)利用SQLServerManagementStudio的生成脚本功能(选中Student库->右键菜单“任务”->“生成脚本”),自动生成S表的创建脚本,分析自动生成的脚本和自己写的SQL语句的异同点。
USE[student]
GO
SETANSI_NULLSON
GO
SETQUOTED_IDENTIFIERON
GO
SETANSI_PADDINGON
GO
CREATETABLE[dbo].[S](
[sno][char](10)NOTNULL,
[sname][nchar](10)NOTNULL,
[ssex][nchar]
(2)NULL,
[sbirth][date]NULL,
[sPhoneNo][char](10)NULL,
PRIMARYKEYCLUSTERED
(
[sno]ASC
)WITH(PAD_INDEX=OFF,STATISTICS_NORECOMPUTE=OFF,IGNORE_DUP_KEY=OFF,ALLOW_ROW_LOCKS=ON,ALLOW_PAGE_LOCKS=ON)ON[PRIMARY]
)ON[PRIMARY]
GO
SETANSI_PADDINGOFF
GO
2、实验反思
实验一都是基础内容,较为简单,认真做没什么难度。
实验二:
基本表的数据操作
1、实验内容
1.在图形用户界面中对表中的数据进行更新。
(6分,每小题2分)
(1)按照实验一图2.1-图2.4中所示数据,输入SPJ数据库所含四张表中的数据。
(2)修改S表的任意一条数据
(3)删除S表的任意一条数据。
2.针对SPJ数据库,用SQL语句完成下面的数据更新。
(12分,每小题3分)
(1)第四版教材P127页5题的8-11小题。
8题、updatepsetCOLOR='蓝'
whereCOLOR='红'
9题、updateSPJsetSNO='S3'
whereSNO='S5'
andJNO='J4'
andPNO='P6'
10题、deletefromS
whereSNO='S2'
deletefromSPJ
whereSNO='S2'
11题、insertintoSPJ
values('S2','J6','P4',200)
3.针对SPJ数据库,用SQL语句完成下面的数据查询。
(52分,每小题4分)
(1)P127页第4题。
(5道小题)
1、selectdistinctSNOfromSPJ
whereJNO='J1'
2、selectdistinctSNOfromSPJ
whereJNO='J1'andPNO='P1'
3、selectdistinctSNOfromSPJ,P
whereJNO='J1'andSPJ.PNO=P.PNOandCOLOR='红'
4、selectdistinctJNOfromSPJ
whereJNOnotin
(
selectJNOfromSPJ,P,S
whereS.CITY='天津'andS.SNO=SPJ.SNO
andP.PNO=SPJ.PNO
)
5、selectdistinctPNOfromSPJ
whereSNO='S1'
selectJNOfromSPJ
wherePNO='P1'
andJNOin
(
selectJNOfromSPJ
wherePNO='P2'
)
(2)P127页第5题的1-7小题。
(7道小题)
1、selectSNAME,CITYfromS
2、selectPNAME,COLOR,WEIGHTfromP
3、selectdistinctJNOfromSPJ
whereSNO='S1'
4、selectPNAME,QTYfromSPJ,P
whereP.PNO=SPJ.PNOandSPJ.JNO='J2'
5、selectPNOfromSPJ,S
whereS.SNO=SPJ.SNOandCITY='上海'
6、selectJNAMEfromSPJ,S,J
whereS.SNO=SPJ.SNOandS.CITY='上海'andJ.JNO=SPJ.JNO
7、selectdistinctJNOfromSPJ,S
whereS.SNO=SPJ.SNOandS.CITY<>'天津'
(3)查询这样的工程:
供给该工程的零件P1的平均供应量大于供给工程J1的任何一种零件的最大供应量。
selectJNOfromSPJ
wherePNO='P1'
groupbyJNO
havingavg(QTY)>
(
selectmax(QTY)fromSPJ
whereSPJ.JNO='J1'
)
4.针对Student数据库用SQL语句完成下面的数据查询。
(12分,每小题4分)
(1)查询不选修“C语言”课程的学生学号。
selectSNOfromS
exceptselectSNOfromsc
whereCNO=
(
selectCNOfromC
whereCNAME='c语言'
)
(2)查询每个学生已经获得的学分的总分(成绩及格表示获得该门课的学分),并按照所获学分由高到低的顺序输出学号,姓名,所获学分。
selectS.sno,sname,sum(ccredit)totalcredit
fromS,SC,C
whereS.sno=SC.snoandSC.cno=C.cnoandgrade>=60
groupbyS.sno,sname
orderbytotalcredit
(3)查询这样的学生姓名:
该学生选修了全部课程并且其中一门课在90分以上。
selectsnamefromS
wheresnoin
(
selectsnofromSc
wheresnoin
(
selectsnofromS
wherenotexists
(
select*fromC
wherenotexists
(
select*fromSC
wheresno=S.snoandcno=C.cno
)
)
)
groupbysno
havingmax(grade)>90
)
没有查询到满足要求的结果
5.针对Student数据库用至少三种不同的SQL语句进行查询:
查询选修了课程名为“数据库原理”的学生学号和姓名,然后自己设计实验,用数据比较分析三种查询的效率。
(18分)
第一种:
selectS.sno,snamefromS,SC,C
whereS.sno=SC.snoandSC.cno=C.cnoandcname='数据库'
第二种:
selectS.sno,snamefromS
wheresnoin
(
selectsnofromSC
wherecnoin
(
selectcnofromC
wherecname='数据库'
)
)
第三种:
selectdistinctS.sno,snamefromS,SC,C
whereS.sno=SC.snoandSC.cnoin
(
selectcnofromC
wherecname='数据库'
)
第二种效率最高。
2、实验反思
这次实验着重在于要求学生熟练掌握SQL语言,SQL语言很符合人的理解,用起来主要问题在于逻辑的处理,这次实验让我感受到了编程的多样化以及效率的提高,以后多多练习才可以熟练掌握。