中南大学数据库实验报告Word格式.docx
《中南大学数据库实验报告Word格式.docx》由会员分享,可在线阅读,更多相关《中南大学数据库实验报告Word格式.docx(17页珍藏版)》请在冰豆网上搜索。
OrderNumber,ShipmentDate,ActualDeliveryDate,DaysinTransit.(提示:
DaysinTransit=ActualDeliveryDate–ShipmentDate)
8.显示所有玩具的名称、商标和种类(ToyName,Brand,Category)。
9.显示玩具的名称和所有玩具的购物车ID。
如果玩具不在购物车中,则显示NULL值。
10.以下列格式显示所有购物者的名字和他们的简称:
(Initials,vFirstName,vLastName),例如AngelaSmith的Initials为A.S。
11.显示所有玩具的平均价格,并舍入到整数。
12.显示所有购买者和收货人的名、姓、地址和所在城市。
13.显示没有包装的所有玩具的名称。
(要求用子查询实现)
14.显示已发货定单的定单号码以及下定单的时间。
实验三:
视图与触发器
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为参数,实现这个事务。
2.编写一个程序显示每天的定单状态。
如果当天的定单值总合大于170,则显示“Highsales”,否则显示”Lowsales”.报告中要求列出日期、定单状态和定单总价值。
二、实验目的
熟悉SQL语言,加深对数据库知识的认识。
学会用SQL语言解决实际数据库问题。
三、实验源代码
实验一、
-3.
/*sp_helpconstraint@objname=Category
go
sp_helpconstraint@objname=Country
sp_helpconstraint@objname=OrderDetail
sp_helpconstraint@objname=PickOfMonth
sp_helpconstraint@objname=Category
sp_helpconstraint@objname=Recipient
sp_helpconstraint@objname=Shipment
sp_helpconstraint@objname=ShippingMode
sp_helpconstraint@objname=ShippingRate
sp_helpconstraint@objname=Shopper
sp_helpconstraint@objname=ShoppingCart
sp_helpconstraint@objname=ToyBrand
sp_helpconstraint@objname=Toys
sp_helpconstraint@objname=Wrapper;
*/
--4.
createtypexiankefromchar(3)
altertableRecipient
altercolumncCountryIdkk
altertableCountry
5.
USEGlobalToyz
GO
CREATETABLEPremiumToys
(
cToyIdchar(6)primarykey,
vToyNamevarchar(20)notnull,
vToyDescriptionvarchar(250),
cCategoryIdchar(3),
mToyRatemoneynotnull,
cBrandIdchar(3),
imPhotoimage,
siToyQohsmallintnotnull,
siLowerAgesmallintnotnull,
siUpperAgesmallintnotnull,
siToyWeightsmallint,
vToyImgPathvarchar(50)null
)
INSERTINTOPremiumToys
SELECT*FROMToys
WHEREmToyRate>
20
6.7.
ALTERTableToys
ADDsiToyQohsmallintCHECK(siToyQoh>
=0ANDsiToyQoh<
=200),
ALTERTABLEToys
ADDsiLowerAgesmallintCHECK(siLowerAge=’1’),
ADDmToyRateCHECK(mToyRate>
0)
ADDsiToyWeightCHECK(siToyWeigh=’1’)
(
cToyIdchar(6)primarykey,
vToyNamevarchar(20)notnull,
cCategoryIdchar(3),
mToyRatemoneynotnull(mToyRate>
0),
8.updateToys
SetmToyRate=mToyRate+1
WherecToyId=’000001’
实验二
1.SELECTvFirstName
vLastName
vEmailId
FROMGlobalToyz.dbo.Shopper
WHEREcState='
California'
ORcState='
Illinois'
2.SELECTcOrderNo
cShopperId
mTotalCost
FROMGlobalToyz.dbo.Orders
ORDERBYmTotalCostASC
3.SELECT*
FROMGlobalToyz.dbo.OrderDetail
WHEREvMessageISNULL
4.SELECTtop5
cToyId
siMonth
iYear
iTotalSold
FROMGlobalToyz.dbo.PickOfMonth
WHEREiYear=2000
ORDERBYiTotalSoldDESC
5.SELECTtop5
6.SELECTcOrderNo
mToyCost
WHEREmToyCost>
50
7.SELECTvToyName
ToyBrand.cBrandId
ToyBrand.cBrandName
Category.cCategoryId
Category.cCategory
Category.vDescription
FROMGlobalToyz.dbo.Toys,GlobalToyz.dbo.ToyBrand,GlobalToyz.dbo.Category
WHEREtoys.cBrandId=ToyBrand.cBrandId
ANDtoys.cCategoryId=Category.cCategoryId
8.SELECTvToyName
9.SELECTvToyName
ShoppingCart.cCartId
FROMGlobalToyz.dbo.Toys,GlobalToyz.dbo.ShoppingCart
WHEREToys.cToyId=ShoppingCart.cToyId
10.SELECTFLOOR(AVG(mToyRate))
FROMGlobalToyz.dbo.Toys
11.SELECTFLOOR(AVG(mToyRate))
12.SELECTShopper.vFirstName
Shopper.vLastName
Shopper.vAddress
Shopper.cCity
Recipient.vFirstName
Recipient.vLastName
Recipient.vAddress
Recipient.cCity
FROMGlobalToyz.dbo.Shopper,GlobalToyz.dbo.Recipient
13.SELECTvToyName
WHEREcToyIdIN
(
SELECTcToyId
WHEREcWrapperIdISNULL
14.SELECTcOrderNo
dOrderDate
WHEREcOrderNoIN
SELECTcOrderNo
FROMGlobalToyz.dbo.Shipment
WHEREcDeliveryStatus='
d'
实验三
1.CREATEVIEWIS_CHAXUN
AS
SELECTShopper.vFirstName,Shopper.vLastName,Shopper.cCity,Toys.vToyName,Toys.mToyRate,OrderDetail.siQty
FROMShopper,Orders,OrderDetail,Toys
WHEREOrders.cOrderNo=OrderDetail.cOrderNoANDShopper.cShopperId=Orders.cShopperIdANDOrderDetail.cToyId=Toys.cToyId;
2.SELECTvFirstName,vLastName,vToyName,siQty
FROMIS_CHAXUN
WHEREcCity='
;
3.UPDATEvwOrderWrapper
SETsiQty=2,mWrapperRate=mWrapperRate+1
FROMvwOrderWrapper
WHEREcOrderNo=‘000001’
4.CreateTriggertruOD
ONOrderDetail
FORUPDATE
IFUPDATE(siQty)
BEGIN
DECLARE@siQtyint
SELECT@siQty=deleted.siQty
FROMdeleted
UPDATEOrderDetail
SETmToyCost=mToyCost/@siQty*siQty
WHEREcOrderNoIN
(SELECTcOrderNo
FROMdeleted)
END
实验四
1.SELECTcOrderNo
2.CREATEPROCEDUREprcCharges
@cOrderNoint,@mShippingChargesmoneyOUTPUT,@mGiftWrapChargesmoneyOUTPUT
BEGIN
SELECT@cOrderNo=cOrderNo,@mShippingCharges=mShippingCharges,@mGiftWrapCharges=mGiftWrapCharges
FROMOrders
WHEREcOrderNo=@cOrderNo
3.CREATEPROCEDUREprcHandlingCharges@cOrderNoint
DECLARE@mSchargesmoney
DECLARE@mGWchargesmoney
EXECprcCharges@cOrderNo,
@mSchargesoutput,@mGWchargesoutput
RETURN@mScharges+@mGWcharges
实验五
1.CREATEPROCEDUREtianjia@cCartIdchar(6),@cShopperIdchar(6),@cToyIdchar(6),@siQtysmallint
BEGINTRANSACTION
DECLARE@datedatetime;
DECLARE@mToyRatemoney
DECLARE@cOrderNochar(6)
SELECT@date=GETDATE();
EXEC@cOrderNo=prcGenOrder
INSERT
INTOOrders
VALUES(@cOrderNo,@date,@cCartId,@cShopperId,null,null,null,null,null,null);
INSERT
INTOOrderDetail
VALUES(@cOrderNo,@cToyId,@siQty,null,null,null,null)
SELECT@mToyRate=mToyRate
FROMToys
WHEREcToyId=@cToyId
UPDATEOrderDetail
SETmToyCost=siQty*@mToyRate
COMMITTRANSACTION
2.CREATEPROCEDURErepor
DECLARE@totalcostmoney;
SELECT@totalcost=SUM(mTotalCost)
WHEREdOrderDate=@date
IF(@totalcost>
170)
PRINT'
HighSales'
ELSE
LowSales'
四、调用示例
五、实验心得
通过这几次实验,我加深对数据库SQL语言的理解和认识,并学会了用它解决一些简单的实际问题。
我加深了SQL语言的理解。
丰富了我的关于数据库领域的视野。
在实验中,由于自己的基础知识不牢固,遇到了很多的问题,我也认识到了课本中理论的重要性。
在实验之前一定要吃透课本。
只有把课本的基础知识掌握牢固了才能进一步地做好实际操作。
并在实验中发现问题,自己看书,自己解决问题。
实验的收获也是可观的。
不但培养了我的动手操作能力,知识运用能力,独立思考能力,而且让我学会了如何在做计算机方面的实验时,应该注意的一些东西。