




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精选文档SQL SERVER 数据库应用技术实验报告选课序号: 班 级: 学 号: 姓 名: 指导教师: 成 绩: 目 录1.实验目的12.实验内容12.1创建数据库OrderDB(杂志订购数据库)12.2 T-SQL查询12.3存储过程、自定义函数和触发器编程23.实验步骤23.1创建数据库OrderDB(杂志订购数据库)23.2 T-SQL查询53.3存储过程、自定义函数和触发器编程54.总结与体会8精选文档1.实验目的(1) 创建与使用数据库。了解数据库及其各类逻辑对象、数据库的文件与文件组的概念;实践数据库的设计、创建、查看和维护等的操作,。(2) T-SQL查询。掌握SELECT查询
2、命令,INSERT、UPDATE和DELETE等更新命令,及T-SQL对查询与更新命令的增强功能操作。(3) 自定义函数、存储过程与触发器。实践练习自定义函数、存储过程和触发器的使用方法。2.实验内容2.1创建数据库OrderDB(杂志订购数据库)以下各表中的代码或编号列为char(6),名称或类别列为varchar(20),单价或金额列为numeric(10,2),数量列为int,订购日期为日期类型datetime,所在城市列为varchar(16)。(1) 杂志表Magazine(杂志代码Mno,杂志名称Mname,杂志类别Mtype,出版商所在城市Mcity,进货单价Miprice,订购
3、单价Moprice),其中,订购价格>进货价格,杂志类别:文学类、历史类、科技类。主键为(杂志代码Mno)。(2) 客户(杂志的订购单位信息)表Customer(客户代码Cno,客户名称Cname,客户所在城市Ccity,上级主管单位代码Sno,客户类别Ctype),客户(单位)类别:政府单位、事业单位、企业单位。主键为(客户代码Cno)。(3) 杂志订购情况主表OrderH(订单编号Ono,客户代码Cno,订购日期Odate,订单货款金额合计OMsum,订单盈利金额合计OPsum),主键为订单编号Ono。(4) 杂志订购情况明细表OrderList(订单编号Ono,杂志代码Mno,订购
4、数量Onum,进货单价Miprice,订购单价Moprice,订购金额Omoney,盈利金额Oprofit),主键为(订单编号Ono,杂志代码Mno),订购金额=订购单价×订购数量,盈利金额=(订购单价-进货单价)×订购数量。2.2 T-SQL查询实现如下查询功能前,请向所有数据表添加足够多的演示数据。求年份的函数为year( ),返回类型为int,年份=year(订购日期Odate)。(1) 使用WITH公用表表达式查看客户名称为珠江航运公司在广州市的所有上级主管单位代码和单位名称。(2) 查询客户名称为天空网络公司在2011年所订购的大于其最小订购数量的2倍的杂志代码、
5、杂志名称及订购数量。(3) 使用COMPUTE BY、COMPUTE,求客户类别为事业单位在2011年订购的杂志类别为历史类的客户代码、客户名称、订购数量、订购金额,要求同时输出按客户计算的订购数量和订购金额的合计、所有客户的订购数量和订购金额的总计。(4) 使用TOP和查询结果集别名表达式,查询杂志名称为读者、2011年订购数量为第4-10名的客户代码、客户名称和订购数量(设读者的订购客户数>=10)。 (5) 用游标编程,求大连市的杂志在2013年的平均订购数量和总订购数量的功能,不能用COUNT、AVG和SUM函数。2.3存储过程、自定义函数和触发器编程(1) 设计自定义函数fGe
6、tProfit,实现统计某年份给定杂志类别的盈利金额合计的功能,输入参数是统计年份和杂志类别,输出参数是盈利金额合计。(2) 设计存储过程pGetMoney,实现统计某年份给定客户类别的订购金额合计的功能,输入参数是统计年份和客户类别,输出参数是订购金额合计。(3) 编写一段T-SQL程序调用函数fGetProfit,输出2012年杂志类别为科技类的盈利金额合计。(4) 编写一段T-SQL程序调用存储过程pGetMoney,输出2013年客户类别为企业单位的订购金额合计。(5) 为杂志订购情况明细表OrderList定义一个【AFTER】触发器tr_after_OrderList,每插入一条订
7、购情况明细记录(订单编号Ono,杂志代码Mno,订购数量Onum,进货单价Miprice,订购单价Moprice),自动计算其订购金额Omoney和盈利金额Oprofit,同时自动计算订购情况主表OrderH的订单货款金额合计OMsum和订单盈利金额合计OPsum。其中,订购情况明细表OrderList的订购金额=订购单价×订购数量,盈利金额=(订购单价-进货单价)×订购数量。(6) 禁用触发器tr_after_OrderList,再为杂志订购情况明细表OrderList设计一个【INSTEAD OF】触发器tr_instead_OrderList,完成(5)的同样功能。(
8、7) 编写insert语句示例,分别验证触发器tr_after_OrderList和tr_instead_OrderList效果。3.实验步骤按以上实验内容的要求,给出实验步骤,包括功能实现过程的简要文字说明、T-SQL语句、SQL Server Management Studio的运行结果截图等。3.1创建数据库OrderDB(杂志订购数据库)3.1.1根据实验要求利用交互式SQL SERVER 2005创建OrderDB数据库的数据类型、列项和主键。1.Customer表2.Magazine表3.OrderH表4.OrderList表3.1.2根据实验的查询要求向表中加入数据1.Custo
9、mer表2.Magazine表3.OrderH表4.OrderList表(数据量较大,未能截全)3.2 T-SQL查询(1)-T-SQL(1)WITH Csno(sno) AS(SELECT sno FROM Customer WHERE Cname = '珠江航运公司' UNION ALL SELECT Customer.sno FROM Csno, Customer WHERE Csno.sno = Co )SELECT Customer.Cno ,Customer.Cname FROM Csno,Customer WHERE Csno.sno = Co AND Ccity
10、='广州'-递归求出珠江航运公司在广州的上级主管单位执行结果(2)-T-SQL(2)SELECT Magazine.Mno,Mname,OnumFROM Customer JOIN OrderH ON(Customer.Cno=OrderH.Cno) JOIN OrderList ON(OrderH.Ono=OrderList.Ono) JOIN Magazine ON(OrderList.Mno=Magazine.Mno)WHERE year(Odate)='2011' AND Customer.Cname='天空网络公司' AND Onum&
11、gt;(2*(SELECT MIN(Onum)FROM Customer JOIN OrderH ON(Customer.Cno=OrderH.Cno) JOIN OrderList ON(OrderH.Ono=OrderList.Ono) JOIN Magazine ON(OrderList.Mno=Magazine.Mno)WHERE year(Odate)='2011' AND Customer.Cname='天空网络公司')-天空网络公司在年所订购的大于其最小订购数量的倍的杂志代码、杂志名称及订购数量执行结果(3)-T-SQL(3)SELECT Cust
12、omer.Cno,Customer.Cname,Onum,OmoneyFROM Customer JOIN OrderH ON(Customer.Cno=OrderH.Cno) JOIN OrderList ON(OrderH.Ono=OrderList.Ono) JOIN Magazine ON(OrderList.Mno=Magazine.Mno)WHERE Customer.Ctype='事业单位' AND year(Odate)='2011' AND Magazine.Mtype='历史类'ORDER BY Cno -客户类别为事业单位在
13、年订购的杂志类别为历史类的客户代码、客户名称、订购数量、订购金额COMPUTE SUM(Onum),SUM(Omoney) BY Cno -使用COMPUTE BY、COMPUTE同时输出按客户计算的订购数量和订购金额的合计、所有客户的订购数量和订购金额的总计。COMPUTE SUM(Onum),SUM(Omoney)执行结果(4)-T-SQL(4)SELECT TOP 7 Onum,Customer.Cno,Cname -使用TOP和查询结果集别名表达式,查询杂志名称为读者、年订购数量为第-10名的客户代码、客户名称和订购数量 FROM (SELECT DISTINCT TOP 10 Onu
14、m,Cno FROM OrderH JOIN OrderList ON (OrderH.Ono=OrderList.Ono) JOIN Magazine ON (OrderList.Mno=Magazine.Mno) WHERE year(Odate)='2011' AND Mname='读者' ORDER BY Onum ASC) AS T1(Onum,Cno) JOIN Customer ON (T1.Cno=Customer.Cno)执行结果(5)-T-SQL(5)DECLARE CurDnum SCROLL CURSOR FOR SELECT Onum
15、-用游标编程,求大连市的杂志在年的平均订购数量和总订购数量的功能,不能用COUNT、AVG和SUM函数。FROM Magazine JOIN OrderList ON (Magazine.Mno=OrderList.Mno) JOIN OrderH ON(OrderList.Ono=OrderH.Ono) WHERE Mcity='大连' AND year(Odate)='2013'-定义局部变量DECLARE AvgDnum numeric(4,1), SumDnum INT, PerDnum INT,Cnt numeric(4,1);SET SumDnum
16、= 0;SET Cnt = 0;OPEN CurDnum; -打开游标FETCH Next FROM CurDnum INTO PerDnum; -提取第一条游标记录WHILE FETCH_STATUS = 0 -提取成功则循环BEGIN SET SumDnum=SumDnum+PerDnum; Set Cnt=Cnt+1 FETCH Next FROM CurDnum INTO PerDnum; -提取下一条游标记录ENDSET AvgDnum = SumDnum / Cnt-显示总订阅数量和平均订阅数量SELECT SumDnum as '总订阅数量',AvgDnum as
17、 '平均订阅数量'CLOSE CurDnum;DEALLOCATE CurDnum;-释放游标执行结果3.3存储过程、自定义函数和触发器编程(1)-存储过程、自定义函数和触发器编程(1)CREATE FUNCTION dbo.fGetProfit(time datetime,type varchar(20) RETURNS numeric(10,2)ASBEGINRETURN (SELECT SUM(Oprofit) AS 总利润FROM Magazine JOIN OrderList ON (Magazine.Mno=OrderList.Mno) JOIN OrderH ON
18、 (OrderList.Ono=OrderH.Ono)WHERE year(Odate)= time AND Mtype=type)END执行结果(2)-存储过程、自定义函数和触发器编程(2)CREATE PROC pGetMonytime datetime,type varchar(20),money numeric(10,2) OUTPUTASBEGINSELECT money=SUM(Omsum)FROM Customer JOIN OrderH ON (Customer.Cno=OrderH.Cno)WHERE year(Odate)=time AND Ctype=typeEND执行结
19、果(3)-存储过程、自定义函数和触发器编程(3)DECLARE a datetime ,b varchar(20),c numeric(10,2)SET a=2011SET b='文学类'select c=dbo.fGetProfit(a,b)print(c)执行结果(4)-存储过程、自定义函数和触发器编程(4)DECLARE time1 datetime,type1 varchar(20),money1 numeric(10,2)SET time1=2013SET type1='企业单位'EXEC pGetMony time1,type1,money1 OUT
20、PUTprint(money1)执行结果(5)-存储过程、自定义函数和触发器编程(5)CREATE TRIGGER tr_after_OrderList ON OrderList AFTER INSERT ASBEGINDECLARE money numeric(10,2),profit numeric(10,2),c varchar(6)-设置变量UPDATE OrderList -更新OrderList表SET Omoney=(OrderList.Moprice* OrderList.Onum),Oprofit=(OrderList.Moprice-OrderList.Miprice)*O
21、rderList.Onum)FROM OrderH JOIN inserted a ON (OrderH.Ono=a.Ono)SELECT c=Ono -从插入的表中提取出Ono,作为后续更新表的条件FROM insertedSELECT money=SUM(Omoney),profit=SUM(Oprofit)FROM OrderListWHERE OrderList.Ono=cUPDATE OrderH -更新OrderH表SET OMsum=money,OPsum=profitWHERE OrderH.Ono=cEND执行结果(6)-存储过程、自定义函数和触发器编程(6)DISABLE
22、TRIGGER tr_after_OrderList ON OrderList-禁用tr_after_OrderList触发器CREATE TRIGGER tr_instead_OrderList ON OrderList instead of INSERT ASBEGINDECLARE money numeric(10,2),profit numeric(10,2),c varchar(6)-设置变量UPDATE OrderList -更新OrderList表SET Omoney=(OrderList.Moprice* OrderList.Onum),Oprofit=(OrderList.Moprice-OrderList.Miprice)*OrderList.Onum)FROM OrderH JOIN inserted a ON (OrderH.Ono=a.Ono)SELECT c=
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电商绿色物流物流园区绿色物流绿色物流园区物流信息平台建设报告
- 福建省漳州市名校2024年中考二模数学试题含解析
- 高端数控机床智能化升级在石材加工设备制造的应用与发展报告
- 玻璃行业技术创新与2025年市场需求竞争格局分析报告
- 区块链技术在教育信息化中的透明与安全路径
- 医患沟通技巧培训构建和谐医患关系
- 高考考前对学生的动员发言稿模版
- 企业健康保险计划中的异地就医支持措施
- 新型储能行业发展趋势与未来潜力分析
- 推动知识产权保护高地建设的行动计划
- 2025年地理高考复习 专题05“演变过程类”选择题答题技巧(解析版)
- GB/T 3091-2025低压流体输送用焊接钢管
- 猪场买卖合同协议
- 湖北省武汉市2025届高中毕业生四月调研考试生物试题及答案(武汉四调)
- 25年公司级安全培训考试试题含答案【典型题】
- 啤酒分销合同协议
- 2024年山东铁投集团春季社会公开招聘46人笔试参考题库附带答案详解
- 供应商的准入管理
- 辽宁省名校联盟2025届高三高考模拟(调研卷)(四)数学试题
- 武汉2025届高中毕业生二月调研考试数学试题及答案
- 小学数学六年级下册-比例练习题(附带答案及详细解析)
评论
0/150
提交评论