数据库上机报告.docx
- 文档编号:11203059
- 上传时间:2023-02-25
- 格式:DOCX
- 页数:21
- 大小:1.05MB
数据库上机报告.docx
《数据库上机报告.docx》由会员分享,可在线阅读,更多相关《数据库上机报告.docx(21页珍藏版)》请在冰豆网上搜索。
数据库上机报告
课程实验报告
课程名称:
数据库上机实验
专业班级:
学号:
姓名:
指导教师:
报告日期:
计算机科学与技术学院
目录
一、实验目的1
二、实验要求1
三、操作平台2
四、实验过程及结果3
五、实验总结17
六、参考文献18
一、实验目的
1、熟悉SQLserver软件实验平台。
2、掌握使用SQL语句。
二、实验要求
(一)软件功能学习部分
完成下列1~2题,并在实验报告中叙述过程,可适当辅以插图(控制在A4三页篇幅以内)
1.练习sqlserver的两种完全备份方式:
数据和日志文件的脱机备份、系统的备份功能。
2.练习在新增的数据库上增加用户并配置权限的操作。
(二)Sql练习部分
完成下列1~4题,实验报告中写出1~3题相应的SQL语句,叙述并简要分析第4题的观察结果。
1.建表
1)创建如下三个关系,包括主码和外码的说明
商品表【商品名称、商品类型】
GOODS【GNAMEchar(20),GTYPEchar(10)】
主关键字为(商品名称)。
商品类型为(电器、文具、服装。
。
。
)
商场【商场名称,所在地区】
PLAZA【PNAMEchar(20),PAREAchar(20)】
主关键字为商场名称。
所在地区为(洪山、汉口、汉阳、武昌。
。
。
)
销售价格表【商品名称、商场名称、当前销售价格、目前举办活动类型】
SALE【GNAMEchar(20),PNAMEchar(20),PRICEFLOAT,ATYPEchar(10)】
主关键字为(商品名称、商场名称)。
举办活动类型为(送券、打折),也可为空值,表示当前未举办任何活动。
表中记录如(‘哈森皮靴’,‘亚贸广场’,200,‘打折’),同一商场针对不同的商品可能采取不同的促销活动。
2)观察性实验
验证在建立外码时是否一定要参考被参照关系的主码,并在实验报告中简述过程和结果。
2.数据更新
1)向上述表格中用sql语句完成增、删、改的操作;
2)批处理操作
将SALE表中的打折记录插入到新表SALE_CHEAP中,并基于SALE_CHEAP表创建一个统计每个商场各自打折商品平均价格的视图。
3)观察性实验
建立一个关系,但是不设置主码,然后向该关系中插入重复元组,然后观察在图形化交互界面中对已有数据进行删除和修改时所发生的现象。
4)触发器实验
编写一个语句级触发器,用于对某关系进行增、删或改时生成日志记录,并测试该触发器。
3.查询
1)查询所有以“打折”方式销售的商品的当前销售情况,并按照价格的降序排列;
2)查询所有没有任何活动的商品及其所在的商场,结果按照商品排序;
3)查询价格在200~500元之间的商品名称、所在的商场名称、价格,结果按照商场名称排序;
4)查询每种商品的最低价格、商品名称;
5)查询以“送券”方式销售的商品总数超过30种的商场名称;
6)查询以“送券”方式销售的商品总数超过30种的商场所在地区;
7)查询价格为下列取值之一的商品名称、所在商场名称、目前举办活动的类型,(88、188、288、388、488、588、888);
8)查询以“老”字开头的所有商品的名称;
9)查询同时销售“剃须刀”和“电池”的商场名称;
10)查询不举办任何活动的商场;
11)查询所销售的商品包含了“校园超市”所销售的所有商品的商场名称。
4.了解系统的查询性能分析功能
选择上述第3题中较为复杂的SQL语句,查看其执行之前系统给出的分析计划和实际的执行计划,并进行简单的分析。
(三)函数调用部分(选做)
1.通过系统帮助文档学习系统关于时间、日期、字符串类型的函数,并将其应用于SQL语句。
2.编写自定义的函数,并将其应用于SQL语句。
三、操作平台
1、使用SQLserver2008(R2)以及SQLserver2014开发完成
2、操作系统为windos7
四、实验过程及结果
1建表,创建如下三个关系,包括主码和外码的说明
商品表【商品名称、商品类型】
GOODS【GNAMEchar(20),GTYPEchar(10)】
主关键字为(商品名称)。
商品类型为(电器、文具、服装。
。
。
)
商场【商场名称,所在地区】
PLAZA【PNAMEchar(20),PAREAchar(20)】
主关键字为商场名称。
所在地区为(洪山、汉口、汉阳、武昌。
。
。
)
销售价格表【商品名称、商场名称、当前销售价格、目前举办活动类型】
SALE【GNAMEchar(20),PNAMEchar(20),PRICEFLOAT,ATYPEchar(10)】
主关键字为(商品名称、商场名称)。
举办活动类型为(送券、打折),也可为空值,表示当前未举办任何活动。
表中记录如(‘哈森皮靴’,‘亚贸广场’,200,‘打折’),同一商场针对不同的商品可能采取不同的促销活动。
相应SQLserver语句:
/*建表*/
createdatabaseU201214873
createtableGOODS(GNAMEchar(20)primarykey,
GTYPEchar(10));
createtablePLAZA(PNAMEchar(20)primarykey,
PAREAchar(20));
createtableSALE(GNAMEchar(20),
PNAMEchar(20),
PRICEFLOAT,
ATYPEchar(10),
primarykey(GNAME,PNAME),
foreignkey(GNAME)REFERENCESGOODS(GNAME),
FOREIGNKEY(PNAME)REFERENCESPLAZA(PNAME));
结果如图4.1:
图4.1建表
2.向上述表格中用sql语句完成增、删、改的操作;
即对表的内容进行增删改,对应sql的insert、delete、update语句。
相应SQLserver语句:
/*插入数据*/
insertintoGOODSvalues('铅笔','文具');
insertintoGOODSvalues('西装','服装');
insertintoGOODSvalues('电脑','电器');
insertintoGOODSvalues('电冰箱','电器');
insertintoGOODSvalues('老干妈','食品');
insertintoGOODSvalues('老陈醋','食品');
insertintoGOODSvalues('剃须刀','生活用品');
insertintoGOODSvalues('电池','生活用品');
insertintoPLAZAvalues('中百仓储','洪山');
insertintoPLAZAvalues('银泰百货','汉口');
insertintoPLAZAvalues('华洋堂','武昌');
insertintoPLAZAvalues('校园超市','洪山');
insertintoSALEvalues('铅笔','中百仓储',0.5,null);
insertintoSALEvalues('老陈醋','中百仓储',5,'送券');
insertintoSALEvalues('老干妈','中百仓储',4.5,null);
insertintoSALEvalues('电冰箱','中百仓储',188,'打折');
insertintoSALEvalues('电池','中百仓储',1,null);
insertintoSALEvalues('剃须刀','中百仓储',99,'打折');
insertintoSALEvalues('老干妈','校园超市',5,'送券');
insertintoSALEvalues('电池','校园超市',3,'送券');
insertintoSALEvalues('铅笔','校园超市',0.5,'送券');
insertintoSALEvalues('老陈醋','校园超市',6,'送券');
insertintoSALEvalues('电脑','银泰百货',399,'打折');
insertintoSALEvalues('电冰箱','银泰百货',199,'打折');
insertintoSALEvalues('西装','华洋堂',99,'送券');
结果如图4.2:
图4.2插入数据
此时综合查询结果为:
相应SQLserver语句:
selectGOODS.*,PLAZA.*,SALE.*
FROMGOODS,PLAZA,SALE
WHEREGOODS.GNAME=SALE.GNAMEandPLAZA.PNAME=SALE.PNAME;
图4.3综合查询
3.批处理操作
将SALE表中的打折记录插入到新表SALE_CHEAP中,并基于SALE_CHEAP表创建一个统计每个商场各自打折商品平均价格的视图。
相应SQLserver语句:
/*新建sale_cheap表*/
droptablesale_cheap;
CREATTABLESALE_CHEAP(GNAMEchar(20),
PNAMEchar(20),
PRICEFLOAT,
ATYPEchar(10));
/*sale_cheap表更新数据*/
INSERTINTOSALE_CHEAP
SELECT*
FROMSALE
WHERESALE.ATYPE='打折';
/*sale_cheap数据查询*/
SELECT*
FROMSALE_CHEAP;
/*sale_cheap视图*/
GO
CREATVIEWSALE_CHEAP_AVG(PName,avg_price)AS
SELECTPName,AVG(Price)
FROMSALE_CHEAP
GROUPBYPName;
结果如图4.3:
图4.4批量处理
5.触发器实验
编写一个语句级触发器,用于对某关系进行增、删或改时生成日志记录,并测试该触发器。
相应SQLserver语句:
createtriggerchange_sale_on_insertonSale
afterinsert
as
begin
deletefromsale_cheap;
insertintosale_cheap
select*
fromSale
whereATypeisnotnull;
end;
图4.5触发器insert
createtriggerchange_sale_on_update
onSale
afterupdate
as
begin
deletefromsale_cheap;
insertintosale_cheap
select*
fromSale
whereATypeisnotnull;
end;
图4.6触发器update
createtriggerchange_sale_on_delete
onSale
afterdelete
as
begin
deletefromsale_cheap;
insertintosale_cheap
select*
fromSale
whereATypeisnotnull;
end;
图4.7触发器delete
6.查询
共需实现11个查询。
为了方便验证查询语句及结果是否正确,先给出基本表SALE的内容:
其中涉及到的代码编写与操作均在图中显示。
1)查询所有以“打折”方式销售的商品的当前销售情况,并按照价格的降序排列;
相应SQLserver语句:
selectGName,PName,Price
fromSale
whereAType='打折'
orderbyPricedesc
图4.8查询打折销售
2)查询所有没有任何活动的商品及其所在的商场,结果按照商品排序;
相应SQLserver语句:
selectGName,PName
fromSale
whereATypeisnull
orderbyGName
图4.9查询商场
3)查询价格在200~500元之间的商品名称、所在的商场名称、价格,结果按照商场名称排序;
selectGName,PName,Price
fromSale
wherePricebetween200and500
orderbyPName;
图4.10商场名称
4)查询每种商品的最低价格、商品名称;
相应SQLserver语句:
selectGName,min(Price)min_price
fromSale
groupbyGName;
图4.11商品名称
5)查询以“送券”方式销售的商品总数超过3种的商场名称;
相应SQLserver语句:
selectPName
fromSale
whereAType='送券'
groupbyPNamehavingCOUNT(*)>1;
图4.12送券商场名称
6)查询以“送券”方式销售的商品总数超过3种的商场所在地区;
selectdistinctParea
fromPlaza
wherePNamein(selectPName
fromSale
whereAType='送券'
groupbyPNamehavingCOUNT(*)>1);
图4.13送券地方
7)查询价格为下列取值之一的商品名称、所在商场名称、目前举办活动的类型,(88、188、288、388、488、588、888);
相应SQLserver语句:
selectSale.PName,Parea
fromPlaza,Sale
whereSale.PName=Plaza.PNameandPricein(88,188,288,388,488,588,888);
图4.14活动类型
8)查询以“老”字开头的所有商品的名称;
相应SQLserver语句:
selectGName
fromGoods
whereGNamelike'老%';
图4.15“老”开头商品
9)查询同时销售“花格子T恤”和“沙滩裤”的商场名称;
相应SQLserver语句:
selects1.PName
fromSales1,Sales2
wheres1.PName=s2.PNameands1.GName='剃须刀'ands2.GName='电池';
图4.16商品名称
10)查询不举办任何活动的商场;
相应SQLserver语句:
selectPName
fromPlaza
wherePNamenotin(selectPName
fromSale
whereATypeisnotnull);
图4.17不举办活动商场
11)查询所销售的商品包含了“校园超市”所销售的所有商品的商场名称。
相应SQLserver语句:
selectdistinctPName
fromSales1
wherenotexists(select*fromSales2
wheres2.PName='校园超市'andnotexists(select*fromSales3
wheres3.PName=s1.PNameands3.GName=s2.GName));
图4.18复杂查询
7了解系统的查询性能分析功能
选择上述第3题中较为复杂的SQL语句,查看其执行之前系统给出的分析计划和实际的执行计划,并进行简单的分析。
(三)函数调用部分(选做)
1.通过系统帮助文档学习系统关于时间、日期、字符串类型的函数,并将其应用于SQL语句。
2.编写自定义的函数,并将其应用于SQL语句。
/*函数调用部分*/
SELECTlen(‘U201214873’);
图4.19字符串长度函数
自定义函数实例:
createfunction[dbo].[fn_IsLeapYear](@yearint)returnsvarchar(14)asbegindeclare@returnvaluevarchar(14)declare@setvalueintset@setvalue=datepart(mm,dateadd(dd,1,cast((cast(@yearasvarchar(4))+'0228')asdatetime)))if(@setvalue=2)set@returnvalue='闰年'elseset@returnvalue='非闰年'return(cast(@yearasvarchar(8))+'年:
'+@returnvalue)endgo
此自定义函数可以根据给定的年份判断是否为闰年。
测试用例:
selectdbo.[fn_IsLeapYear](year(getdate()));
selectdbo.[fn_IsLeapYear](2016);
图4.20运行结果
五、实验总结
本次数据库课程实验是在SQLserver2008(R2)的实验平台下完成的,由于实验软件环境的不熟悉,所以在实验开始阶段花了较多的时间去查阅资料并借助教程来熟悉实验平台。
在实验过程中,由于自己没有采用多任务窗口来编写代码,所有工作在一个窗口下完成,这样就导致了编译运行时,表的重复创建和数据的重复插入,这样就会报错,必须要将先前的代码给注释掉,使得整个过程变得麻烦繁琐。
还有一个问题是由于实验是在实验室中完成,借助SQLserver2008(R2)的实验平台,每次实验结束时数据库备份后下一次不一定能找到还原,使得每次任务都要新建数据库。
总的来说通过此次的数据库实验,加深了我对SQL语言的认识,对于一些基本的SQL语句操作更加熟悉地掌握。
同时,也让我对SQLserver2008(R2)实验平台有了一个较为深刻的认识,对于在此平台上建立和编写数据库的整个流程有了一个直观的了解,为以后的课程设计打下了基础。
六、参考文献
[1]王珊.《数据库系统概论》.第四版.北京:
高等教育出版社.2006
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 上机 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)