数据库实验报告.pdf

上传人:苏美尔 文档编号:6080185 上传时间:2020-09-06 格式:PDF 页数:31 大小:906.96KB
返回 下载 相关 举报
数据库实验报告.pdf_第1页
第1页 / 共31页
数据库实验报告.pdf_第2页
第2页 / 共31页
数据库实验报告.pdf_第3页
第3页 / 共31页
数据库实验报告.pdf_第4页
第4页 / 共31页
数据库实验报告.pdf_第5页
第5页 / 共31页
点击查看更多>>
资源描述

《数据库实验报告.pdf》由会员分享,可在线阅读,更多相关《数据库实验报告.pdf(31页珍藏版)》请在三一文库上搜索。

1、数据库实验报告 班级:计算机科学与技术 1005 学号:0909102518 姓名:赵书剑 指导教师:盛津芳 目录 一实验目的1 二实验要求1 三实验内容1 四运行结果6 五实验总结20 一 实验目的 1了解 DBMS的工作环境和系统框架; 2通过 SQL语言对数据库进行操作; 3熟悉 SQL语句。 二 实验要求 1所有的 SQL语句和源代码; 2要求有适当的注释; 3 性约束实施、 实验三、 实验四和实验五要求给出相应的测试用 例。 三实验内容 实实验验一一:创建表、更新表和实施数据完整性 1运行给定的 SQL Script,建立数据库 GlobalToyz。 2创建所有表的关系图。 3列出

2、所有表中出现的约束(包括 Primary key, Foreign key, check constraint, default, unique) 4对Recipient表和Country表中的 cCountryId属性定义 一个用户自定义数据类型,并将该属性的类型定义为这个自定 义数据类型。 5把 价 格 在 $20以 上 的 所 有 玩 具 的 材 料 拷 贝 到 称 为 PremiumToys的新表中。 6对表 Toys实施下面数据完整性规则:(1)玩具的现有数量 应在 0到 200之间;(2)玩具适宜的最低年龄缺省为 1。 7不修改已创建的Toys表, 利用规则实现以下数据完整性:(1

3、) 玩具的价格应大于 0;(2)玩具的重量应缺省为 1。 8给 id为000001玩具的价格增加$1。 实实验验二二:查询数据库 1. 显示属于 California和 Illinoi 州的顾客的名、姓和 emailID。 2. 显示定单号码、商店 ID,定单的总价值,并以定单的总价值 的升序排列。 3. 显示在 orderDetail表中 vMessage为空值的行。 4. 显示玩具名字中有“Racer”字样的所有玩具的材料。 5. 根据2000年的玩具销售总数, 显示 “Pick of the Month” 玩具的前五名玩具的 ID。 6. 根据 OrderDetail表,显示玩具总价值大

4、于¥50的定单的 号码和玩具总价值。 7. 显示一份包含所有装运信息的报表,包括:Order Number, Shipment Date, Actual Delivery Date, Days in Transit.(提 示 : DaysinTransit=Actual Delivery Date Shipment Date) 8. 显示所有玩具的名称、商标和种类(Toy Name, Brand, Category)。 9. 以 下 列 格 式 显 示 所 有 购 物 者 的 名 字 和 他 们 的 简 称 : (Initials, vFirstName, vLastName) ,例如 Ang

5、ela Smith 的 Initials 为 A.S。 10.显示所有玩具的平均价格,并舍入到整数。 11. 显示所有购买者和收货人的名、姓、地址和所在城市,要求 显示结果中的重复记录。 12. 显示没有包装的所有玩具的名称。(要求用子查询实现) 13. 显示已收货定单的定单号码以及下定单的时间。(要求用子 查询实现) 14.显 示 一 份 基 于Orderdetail 的 报 表 , 包 括 cOrderNo,cToyId和mToyCost, 记录以cOrderNo升序排列, 并计算每一笔定单的玩具总价值。(提示:使用运算符 COMPUTE BY)。 15. 把 价 格 在 $20 以 上

6、的 所 有 玩 具 的 信 息 拷 贝 到 称 为 PremiumToys的新表中。 实实验验三三:视图与触发器 1. 定义一个视图, 包括购买者的姓名、 所在州和他们所订购玩具 的名称、价格和数量。 2. 基于(1)中定义的视图,查询显示所有 California州的购 买者的姓名和他们所订购玩具的名称及数量。 3. 视图定义如下: CREATE VIEW vwOrderWrapper AS SELECTcOrderNo,cToyId,siQty, vDescription, mWrapperRate FROM OrderDetail JOIN Wrapper ONOrderDetail.c

7、WrapperId= Wrapper.cWrapperId 以下更新命令,在更新 siQty 和 mWrapperRate 属性使用 了以下更新命令时出现错误: UPDATE vwOrderWrapper SETsiQty=2,mWrapperRate= mWrapperRate + 1 FROM vwOrderWrapper WHERE cOrderNo = 000001 修改更新命令,以更新基表中的值。 4. 在OrderDetail上定义一个触发器, 如果购物者改变了定单 的数量,玩具的成本也自动地改变。(提示:Toy cost = Quantity * Toy Rate) 实实验验四四

8、:存储过程 1. 编写一段程序,将每种玩具的价格提高¥0.5,直到玩具的平 均价格接近$24.5 为止。此外,任何玩具的最大价格不应超 过$53。 2. 创建一个称为 prcCharges的存储过程,它返回某个定单号 的装运费用和包装费用。 3. 创建一个称为 prcHandlingCharges的过程,它接收定单 号并显示经营费用。PrchandlingCharges 过程应使用 prcCharges过程来得到装运费和礼品包装费。 提示:经营费用=装运费+礼品包装费 实实验验五五:事务与游标 1. 名为 prcGenOrder的存储过程产生存在于数据库中的定单 号: CREATEPROCED

9、UREprcGenOrder OrderNo char(6) OUTPUT as SELECT OrderNo=Max(cOrderNo)FROM Orders SELECT OrderNo= CASE WHEN OrderNo=0 and OrderNo=9 and OrderNo=99 and OrderNo=999andOrderNo=9999 and OrderNo=99999Then Convert(char,OrderNo+1) END RETURN 当购物者确认定单时,应该出现下面的步骤: (1)用上面的过程产生定单号。 (2) 定单号, 当前日期, 购物车ID, 和购物者ID应

10、该加到 Orders 表中。 (3)定单号,玩具 ID,和数量应加到 OrderDetail表中。 (4)在 OrderDetail表中更新玩具成本。(提示:Toy cost = Quantity * Toy Rate). 将上述步骤定义为一个事务。 编写一个过程以购物车 ID和购物者ID 为参数,实现这个事务。 编写一个程序显示每天的定单状态。如果当天的定单值总合大于 170,则显示“High sales”,否则显示”Low sales”.报告中要 求列出日期、定单状态和定单总价值。 四.运行结果 实验一: 表的关系图如下: 实验二: 1 显示属于California和Illinoi州的顾客

11、的名、 姓和emailID select vFirstName,vLastName,vEmailId from Shopper where cState = California or cState = Illinois; 2显示定单号码、商店 ID,定单的总价值,并以定单的总价值的升 序排列。 selectcOrderNo,cShopperId,mTotalCostfromOrdersorder by mTotalCost; 3显示在 orderDetail表中 vMessage为空值的行。 select * from OrderDetail where vMessage is NULL;

12、4显示玩具名字中有“Racer”字样的所有玩具的材料。 select * from Toys where vToyName like %Racer%; 5根据 2000 年的玩具销售总数,显示“Pick of the Month” 玩具的前五名玩具的 ID。 selectcToyId fromPickOfMonthgroupbycToyIdorderby sum(iTotalSold) desc limit 5; 6 根据 OrderDetail表, 显示玩具总价值大于¥50的定单的号码 和玩具总价值。 select cOrderNo,sum(mToyCost) from OrderDetai

13、l group by cOrderNo having sum(mToyCost) 50; 7显示一份包含所有装运信息的报表,包括:Order Number, ShipmentDate,ActualDeliveryDate,Daysin Transit. (提示:Days in Transit = Actual Delivery Date Shipment Date) select cOrderNo as Order Number,dShipmentDate as Shipment Date,dActualDeliveryDate as ActualDeliveryDate,datediff(d

14、ActualDeliveryDate,dShipme ntDate) as Days in Transit from Shipment; 8显示所有玩具的名称、商标和种类(Toy Name, Brand, Category)。 select vToyName,cBrandName,cCategory from (Toys natural join Toybrand) join Category using (cCategoryid); 9以下列格式显示所有购物者的名字和他们的简称:(Initials, vFirstName, vLastName) ,例如Angela Smith 的Initia

15、ls 为 A.S select concat(left(vFirstName,1), .,left(vLastName,1) as initials,vFirstName,vLastName from Shopper; 10显示所有玩具的平均价格,并舍入到整数。 select round(sum(mToyRate)/count(*) as average_rate from Toys; 11显示所有购买者和收货人的名、姓、地址和所在城市,要求显 示结果中的重复记录。 (selectvFirstName,vLastName,vAddress,cCityfrom Recipient)unional

16、l(select vFirstName,vLastName,vAddress,cCity from Shopper); 12显示没有包装的所有玩具的名称。(要求用子查询实现) select vToyName from Toys where cToyId in (select cToyId from OrderDetail where cGiftWrap = N); 13. 显示已收货定单的定单号码以及下定单的时间。 (要求 用子查询实现) select cOrderNo,dOrderDate from OrderswherecOrderNoin (selectcOrderNofromShipm

17、entwherecDeliveryStatus= d); 14.显 示 一 份 基 于Orderdetail的 报 表 , 包 括 cOrderNo,cToyId 和 mToyCost,记录以 cOrderNo升序排列, 并计算每一笔定单的玩具总价值。(提示: 使用运算符COMPUTE BY) 。 SET gt=0;#grand total counter SET st=0;#subtotal counter SET pg=;#previous group SELECT cOrderNo,cToyId, mToyCost, (gt := gt + mToyCost) AS GrandTotal

18、, (st:=IF(pg!=cOrderNo,1,st+1)AS SubTotal,pg:=cOrderNo FROM OrderDetail ORDER BY cOrderNo ; 15.把 价 格 在 $20以 上 的 所 有 玩 具 的 信 息 拷 贝 到 称 为 PremiumToys的新表中。 createtablePremiumToysselect*fromToyswhere mToyRate 20; 16. 给 id 为000001玩具的价格增加$1。 updateToyssetmToyRate=mToyRate+1wherecToyId= 000001; 17. 删除“Larg

19、o”牌的所有玩具。 delete from Toys where cBrandId in (select cBrandId from ToyBrand where cBrandName = Largo); 有外键约束存在,无法删除 实验三: 1. 定义一个视图,包括购买者的姓名、所在州和他们所订购玩具的 名称、价格和数量。 CREATEVIEW demo(firstname,lastname,location,toyname,toyprice,toynum) AS SELECT vFirstName, vLastName, cState, vToyName, mToyRate, siQty F

20、ROM (Shopper JOIN Orders USING (cShopperId) JOIN OrderDetail USING(cOrderNo) JOIN Toys USING(cToyId); 2. 基于(1)中定义的视图,查询显示所有 California州的购买 者的姓名和他们所订购玩具的名称及数量。 SELECT firstname, lastname, toyname, toynum FROM demo WHERE LOCATION = California; 3.编写一段程序, 将每种玩具的价格提高¥0.5, 直到玩具的平均价 格接近$24.5为止。此外,任何玩具的最大价格

21、不应超过$53。 CREATEFUNCTIONPlusMoney(plusnumfloat,sumnum float,maxnum float) RETURNS int(11) BEGIN #Routine body goes here. Loop1:WHILE(SELECTSUM(mToyRate)/COUNT(*)FROM Toys) sumnum) DO UPDATE Toys SET mToyRate =mToyRate +plusnum WHERE mToyRate =0 and OrderNo=9 and OrderNo=99 and OrderNo=999 and OrderNo

22、=9999 and OrderNo=99999Then Convert(char,OrderNo+1) END RETURN 当购物者确认定单时,应该出现下面的步骤: (1)用上面的过程产生定单号。 (2) 定单号, 当前日期, 购物车ID, 和购物者ID应该加到 Orders 表中。 (3)定单号,玩具 ID,和数量应加到 OrderDetail表中。 (4)在 OrderDetail表中更新玩具成本。(提示:Toy cost = Quantity * Toy Rate). 将上述步骤定义为一个事务。 编写一个过程以购物车 ID和购物者ID 为参数,实现这个事务。 - = -Template

23、generatedfromTemplateExplorer using: - Create Procedure (New Menu).SQL - - Use the Specify Values for Template Parameters -command(Ctrl-Shift-M)tofillinthe parameter - values below. - - This block of comments will not be included in - the definition of the procedure. - = SET ANSI_NULLS ON GO SET QUO

24、TED_IDENTIFIER ON GO - = - Author: - Create date: - Description: - = CREATEPROCEDUREprcGenOrder(ShoppingcartID char(6)OUTPUT,ShopperIDchar(6)OUTPUT,ToysID char(6) OUTPUT,QTY smallint OUTPUT) - Add the parameters for the stored procedure here AS DECLARE OrderNo char(6) SELECT OrderNo=Max(cOrderNo)FRO

25、M Orders SELECT CASE WHEN OrderNo=0 and OrderNo=9 and OrderNo=99 and OrderNo=999 and OrderNo=9999 and OrderNo=99999 Then Convert(char,OrderNo+1) END RETURN BEGIN -SETNOCOUNTONaddedtopreventextra result sets from - interfering with SELECT statements. SET NOCOUNT ON; INSERT INTO Orders (cOrderNo,dOrde

26、rDate,cCartId,cShopperId) VALUES (OrderNo,CONVERT(datetime,GETDATE(),Shoppingca rtID,ShopperID) INSERT INTO OrderDetail (cOrderNo,cToyId,siQty) VALUES (OrderNo,ToysID,QTY) - Insert statements for procedure here END GO 2.编写一个程序显示每天的定单状态。如果当天的定单值总合大于 170,则显示“High sales”,否则显示”Low sales”.报告中要 求列出日期、定单状态

27、和定单总价值。 - = -TemplategeneratedfromTemplateExplorer using: - Create Procedure (New Menu).SQL - - Use the Specify Values for Template Parameters -command(Ctrl-Shift-M)tofillinthe parameter - values below. - - This block of comments will not be included in - the definition of the procedure. - = SET ANS

28、I_NULLS ON GO SET QUOTED_IDENTIFIER ON GO - = - Author: - Create date: - Description: - = CREATE PROCEDURE SATUTE AS BEGIN -SETNOCOUNTONaddedtopreventextra result sets from - interfering with SELECT statements. SET NOCOUNT ON; - Insert statements for procedure here SELECTGETDATE()ASdatetime,(CASEWHE

29、N COUNT(Orders.cOrderNo)=170THENHIGHWHEN COUNT(Orders.cOrderNo)170THENLOWEND)AS SATUTE,COUNT(Orders.mTotalCost) AS TOTALCOST FROM Orders END GO 五实验总结 通过数据库的实验,我对数据库的基本知识进行了一次系统的复 习,是的基础知识更加扎实了,对 SQL语言的掌握更加好,能够熟 练的利用 SQL语言操作数据库,真是受益匪浅,同时实践动手能力 也得到了提高,做实验确实是一件让人快速提高的事情。 一开始的时候,我并不知道怎么去操作,心里十分着急,后来在 老师和同学们的帮助下, 自己也查阅了很多资料, 开始慢慢的指导怎 么做了,我才开始发现,做实验确实是一件有趣的事情,我开始一点 点的钻研, 慢慢的用于发现了一些规律, 后来实验做起来就越来越轻 松了,看来坚持不懈,关于提问,自主学习在实验中是十分重要的。 正式通过这些, 我才能如愿的顺利完成这次实验, 同时也感谢那些帮 助过我的老师和同学们,没有你们的帮助,我是无法成长的,感谢你 们。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1