数据库实验报告10级Word格式文档下载.docx
《数据库实验报告10级Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《数据库实验报告10级Word格式文档下载.docx(21页珍藏版)》请在冰豆网上搜索。
![数据库实验报告10级Word格式文档下载.docx](https://file1.bdocx.com/fileroot1/2022-11/16/2e38de0d-b9ab-4932-b0a5-a7d953ca32fd/2e38de0d-b9ab-4932-b0a5-a7d953ca32fd1.gif)
1.了解DBMS的工作环境和系统框架;
2.通过SQL语言对数据库进行操作;
3.熟悉SQL语句。
二.实验要求
1.所有的SQL语句和源代码;
2.要求有适当的注释;
3.性约束实施、实验三、实验四和实验五要求给出相应的测试用例。
三.实验内容
实验一:
创建表、更新表和实施数据完整性
1.运行给定的SQLScript,建立数据库GlobalToyz。
2.创建所有表的关系图。
3.列出所有表中出现的约束(包括Primarykey,Foreignkey,checkconstraint,default,unique)
4.对Recipient表和Country表中的cCountryId属性定义一个用户自定义数据类型,并将该属性的类型定义为这个自定义数据类型。
5.把价格在$20以上的所有玩具的材料拷贝到称为PremiumToys的新表中。
6.对表Toys实施下面数据完整性规则:
(1)玩具的现有数量应在0到200之间;
(2)玩具适宜的最低年龄缺省为1。
7.不修改已创建的Toys表,利用规则实现以下数据完整性:
(1)玩具的价格应大于0;
(2)玩具的重量应缺省为1。
8.给id为‘000001’玩具的价格增加$1。
实验二:
查询数据库
1.显示属于California和Illinoi州的顾客的名、姓和emailID。
2.显示定单号码、商店ID,定单的总价值,并以定单的总价值的升序排列。
3.显示在orderDetail表中vMessage为空值的行。
4.显示玩具名字中有“Racer”字样的所有玩具的材料。
5.根据2000年的玩具销售总数,显示“PickoftheMonth”玩具的前五名玩具的ID。
6.根据OrderDetail表,显示玩具总价值大于¥50的定单的号码和玩具总价值。
7.显示一份包含所有装运信息的报表,包括:
OrderNumber,ShipmentDate,ActualDeliveryDate,DaysinTransit.(提示:
DaysinTransit=ActualDeliveryDate–ShipmentDate)
8.显示所有玩具的名称、商标和种类(ToyName,Brand,Category)。
9.以下列格式显示所有购物者的名字和他们的简称:
(Initials,vFirstName,vLastName),例如AngelaSmith的Initials为A.S。
10.显示所有玩具的平均价格,并舍入到整数。
11.显示所有购买者和收货人的名、姓、地址和所在城市,要求显示结果中的重复记录。
12.显示没有包装的所有玩具的名称。
(要求用子查询实现)
13.显示已收货定单的定单号码以及下定单的时间。
14.显示一份基于Orderdetail的报表,包括cOrderNo,cToyId和mToyCost,记录以cOrderNo升序排列,并计算每一笔定单的玩具总价值。
(提示:
使用运算符COMPUTEBY)。
15.把价格在$20以上的所有玩具的信息拷贝到称为PremiumToys的新表中。
实验三:
视图与触发器
1.定义一个视图,包括购买者的姓名、所在州和他们所订购玩具的名称、价格和数量。
2.基于
(1)中定义的视图,查询显示所有California州的购买者的姓名和他们所订购玩具的名称及数量。
3.视图定义如下:
CREATEVIEWvwOrderWrapper
AS
SELECTcOrderNo,cToyId,siQty,vDescription,mWrapperRate
FROMOrderDetailJOINWrapper
ONOrderDetail.cWrapperId=Wrapper.cWrapperId
以下更新命令,在更新siQty和mWrapperRate属性使用了以下更新命令时出现错误:
UPDATEvwOrderWrapper
SETsiQty=2,mWrapperRate=mWrapperRate+1
FROMvwOrderWrapper
WHEREcOrderNo=‘000001’
修改更新命令,以更新基表中的值。
4.在OrderDetail上定义一个触发器,如果购物者改变了定单的数量,玩具的成本也自动地改变。
Toycost=Quantity*ToyRate)
实验四:
存储过程
1.编写一段程序,将每种玩具的价格提高¥0.5,直到玩具的平均价格接近$24.5为止。
此外,任何玩具的最大价格不应超过$53。
2.创建一个称为prcCharges的存储过程,它返回某个定单号的装运费用和包装费用。
3.创建一个称为prcHandlingCharges的过程,它接收定单号并显示经营费用。
PrchandlingCharges过程应使用prcCharges过程来得到装运费和礼品包装费。
提示:
经营费用=装运费+礼品包装费
实验五:
事务与游标
1.名为prcGenOrder的存储过程产生存在于数据库中的定单号:
CREATEPROCEDUREprcGenOrder
@OrderNochar(6)OUTPUT
as
SELECT@OrderNo=Max(cOrderNo)FROMOrders
SELECT@OrderNo=
CASE
WHEN@OrderNo>
=0and@OrderNo<
9Then
‘00000’+Convert(char,@OrderNo+1)
=9and@OrderNo<
99Then
‘0000’+Convert(char,@OrderNo+1)
=99and@OrderNo<
999Then
‘000’+Convert(char,@OrderNo+1)
=999and@OrderNo<
9999Then
‘00’+Convert(char,@OrderNo+1)
=9999and@OrderNo<
99999Then
‘0’+Convert(char,@OrderNo+1)
=99999ThenConvert(char,@OrderNo+1)
END
RETURN
当购物者确认定单时,应该出现下面的步骤:
(1)用上面的过程产生定单号。
(2)定单号,当前日期,购物车ID,和购物者ID应该加到Orders表中。
(3)定单号,玩具ID,和数量应加到OrderDetail表中。
(4)在OrderDetail表中更新玩具成本。
Toycost=Quantity*ToyRate).
将上述步骤定义为一个事务。
编写一个过程以购物车ID和购物者ID为参数,实现这个事务。
编写一个程序显示每天的定单状态。
如果当天的定单值总合大于170,则显示“Highsales”,否则显示”Lowsales”.报告中要求列出日期、定单状态和定单总价值。
四.运行结果
表的关系图如下:
实验二:
1.显示属于California和Illinoi州的顾客的名、姓和emailID
selectvFirstName,vLastName,vEmailIdfromShopperwherecState='
California'
orcState='
Illinois'
;
2.显示定单号码、商店ID,定单的总价值,并以定单的总价值的升序排列。
selectcOrderNo,cShopperId,mTotalCostfromOrdersorderbymTotalCost;
3.显示在orderDetail表中vMessage为空值的行。
select*fromOrderDetailwherevMessageisNULL;
4.显示玩具名字中有“Racer”字样的所有玩具的材料。
select*fromToyswherevToyNamelike'
%Racer%'
5.根据2000年的玩具销售总数,显示“PickoftheMonth”玩具的前五名玩具的ID。
selectcToyIdfromPickOfMonthgroupbycToyIdorderbysum(iTotalSold)desclimit5;
6.根据OrderDetail表,显示玩具总价值大于¥50的定单的号码和玩具总价值。
selectcOrderNo,sum(mToyCost)fromOrderDetailgroupbycOrderNohavingsum(mToyCost)>
50;
7.显示一份包含所有装运信息的报表,包括:
selectcOrderNoas'
OrderNumber'
dShipmentDateas'
ShipmentDate'
dActualDeliveryDateas'
ActualDeliveryDate'
datediff(dActualDeliveryDate,dShipmentDate)as'
DaysinTransit'
fromShipment;
8.显示所有玩具的名称、商标和种类(ToyName,Brand,Category)。
selectvToyName,cBrandName,cCategoryfrom(ToysnaturaljoinToybrand)joinCategoryusing(cCategoryid);
9.以下列格式显示所有购物者的名字和他们的简称:
(Initials,vFirstName,vLastName),例如AngelaSmith的Initials为A.S
selectconcat(left(vFirstName,1),'
.'
left(vLastName,1))asinitials,vFirstName,vLastNamefromShopper;
10.显示所有玩具的平均价格,并舍入到整数。
selectround(sum(mToyRate)/count(*))asaverage_ratefromToys;
11.显示所有购买者和收货人的名、姓、地址和所在城市,要求显示结果中的重复记录。
(selectvFirstName,vLastName,vAddress,cCityfromRecipient)unionall(selectvFirstName