SQL SERVER数据库实验

上传人:优*** 文档编号:72356800 上传时间:2022-04-09 格式:DOC 页数:14 大小:244.50KB
收藏 版权申诉 举报 下载
SQL SERVER数据库实验_第1页
第1页 / 共14页
SQL SERVER数据库实验_第2页
第2页 / 共14页
SQL SERVER数据库实验_第3页
第3页 / 共14页
资源描述:

《SQL SERVER数据库实验》由会员分享,可在线阅读,更多相关《SQL SERVER数据库实验(14页珍藏版)》请在装配图网上搜索。

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整理为word格式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,订购数量O

4、num,进货单价Miprice,订购单价Moprice,订购金额Omoney,盈利金额Oprofit),主键为(订单编号Ono,杂志代码Mno),订购金额=订购单价订购数量,盈利金额=(订购单价-进货单价)订购数量。2.2 T-SQL查询实现如下查询功能前,请向所有数据表添加足够多的演示数据。求年份的函数为year( ),返回类型为int,年份=year(订购日期Odate)。(1) 使用WITH公用表表达式查看客户名称为珠江航运公司在广州市的所有上级主管单位代码和单位名称。(2) 查询客户名称为天空网络公司在2011年所订购的大于其最小订购数量的2倍的杂志代码、杂志名称及订购数量。(3) 使

5、用COMPUTE BY、COMPUTE,求客户类别为事业单位在2011年订购的杂志类别为历史类的客户代码、客户名称、订购数量、订购金额,要求同时输出按客户计算的订购数量和订购金额的合计、所有客户的订购数量和订购金额的总计。(4) 使用TOP和查询结果集别名表达式,查询杂志名称为读者、2011年订购数量为第4-10名的客户代码、客户名称和订购数量(设读者的订购客户数=10)。 (5) 用游标编程,求大连市的杂志在2013年的平均订购数量和总订购数量的功能,不能用COUNT、AVG和SUM函数。2.3存储过程、自定义函数和触发器编程(1) 设计自定义函数fGetProfit,实现统计某年份给定杂志

6、类别的盈利金额合计的功能,输入参数是统计年份和杂志类别,输出参数是盈利金额合计。(2) 设计存储过程pGetMoney,实现统计某年份给定客户类别的订购金额合计的功能,输入参数是统计年份和客户类别,输出参数是订购金额合计。(3) 编写一段T-SQL程序调用函数fGetProfit,输出2012年杂志类别为科技类的盈利金额合计。(4) 编写一段T-SQL程序调用存储过程pGetMoney,输出2013年客户类别为企业单位的订购金额合计。(5) 为杂志订购情况明细表OrderList定义一个【AFTER】触发器tr_after_OrderList,每插入一条订购情况明细记录(订单编号Ono,杂志代

7、码Mno,订购数量Onum,进货单价Miprice,订购单价Moprice),自动计算其订购金额Omoney和盈利金额Oprofit,同时自动计算订购情况主表OrderH的订单货款金额合计OMsum和订单盈利金额合计OPsum。其中,订购情况明细表OrderList的订购金额=订购单价订购数量,盈利金额=(订购单价-进货单价)订购数量。(6) 禁用触发器tr_after_OrderList,再为杂志订购情况明细表OrderList设计一个【INSTEAD OF】触发器tr_instead_OrderList,完成(5)的同样功能。(7) 编写insert语句示例,分别验证触发器tr_after

8、_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.Customer表2.Magazine表3.OrderH表4.Order

9、List表(数据量较大,未能截全)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=广州;-递归求出珠江航运公司在广州的上级主管单位执行结果(2)-T-SQL(2)

10、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(2*(SELECT MIN(Onum)FROM Customer JOIN OrderH ON(Customer.Cno=OrderH.Cn

11、o) 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 Customer.Cno,Customer.Cname,Onum,OmoneyFROM Customer JOIN OrderH ON(Customer.Cno=OrderH.Cno) JOIN

12、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 -客户类别为事业单位在年订购的杂志类别为历史类的客户代码、客户名称、订购数量、订购金额COMPUTE SUM(Onum),SUM(Omoney) BY Cno -使用COMPUTE BY、COMPUTE同时输出按客户计算的订购数量和订购金额的合计、所有客户的订购数量和订

13、购金额的总计。COMPUTE SUM(Onum),SUM(Omoney)执行结果(4)-T-SQL(4)SELECT TOP 7 Onum,Customer.Cno,Cname -使用TOP和查询结果集别名表达式,查询杂志名称为读者、年订购数量为第-10名的客户代码、客户名称和订购数量 FROM (SELECT DISTINCT TOP 10 Onum,Cno FROM OrderH JOIN OrderList ON (OrderH.Ono=OrderList.Ono) JOIN Magazine ON (OrderList.Mno=Magazine.Mno) WHERE year(Odat

14、e)=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 -用游标编程,求大连市的杂志在年的平均订购数量和总订购数量的功能,不能用COUNT、AVG和SUM函数。FROM Magazine JOIN OrderList ON (Magazine.Mno=OrderList.Mno) JOIN OrderH ON(OrderList.Ono=Or

15、derH.Ono) WHERE Mcity=大连 AND year(Odate)=2013;-定义局部变量DECLARE AvgDnum numeric(4,1), SumDnum INT, PerDnum INT,Cnt numeric(4,1);SET SumDnum = 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

16、FETCH Next FROM CurDnum INTO PerDnum; -提取下一条游标记录ENDSET AvgDnum = SumDnum / Cnt-显示总订阅数量和平均订阅数量SELECT SumDnum as 总订阅数量,AvgDnum as 平均订阅数量CLOSE CurDnum;DEALLOCATE CurDnum;-释放游标执行结果3.3存储过程、自定义函数和触发器编程(1)-存储过程、自定义函数和触发器编程(1)CREATE FUNCTION dbo.fGetProfit(time datetime,type varchar(20) RETURNS numeric(10,2

17、)ASBEGINRETURN (SELECT SUM(Oprofit) AS 总利润FROM Magazine JOIN OrderList ON (Magazine.Mno=OrderList.Mno) JOIN OrderH ON (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) OUTPUTASBEGINSEL

18、ECT money=SUM(Omsum)FROM Customer JOIN OrderH ON (Customer.Cno=OrderH.Cno)WHERE year(Odate)=time AND Ctype=typeEND执行结果(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

19、 varchar(20),money1 numeric(10,2)SET time1=2013SET type1=企业单位;EXEC pGetMony time1,type1,money1 OUTPUTprint(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 -更新OrderL

20、ist表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=Ono -从插入的表中提取出Ono,作为后续更新表的条件FROM insertedSELECT money=SUM(Omoney),profit=SUM(Oprofit)FROM OrderListWHERE OrderList.Ono=cUPDATE Ord

21、erH -更新OrderH表SET OMsum=money,OPsum=profitWHERE OrderH.Ono=cEND执行结果(6)-存储过程、自定义函数和触发器编程(6)DISABLE 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)-设置变

22、量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=Ono -从插入的表中提取出Ono,作为后续更新表的条件FROM insertedSELECT money=SUM(Omoney),profit=SUM(Oprofit)FROM OrderListWHER

23、E OrderList.Ono=cUPDATE OrderH -更新OrderH表SET OMsum=money,OPsum=profitWHERE OrderH.Ono=cEND执行结果(7)-存储过程、自定义函数和触发器编程(7)INSERT -验证tr_after_OrderList触发器INTO OrderList(Ono,Mno,Onum,Miprice,Moprice)VALUES(D7,2,300,3.2,3.5)执行结果INSERT -验证tr_instead_OrderList触发器INTO OrderList(Ono,Mno,Onum,Miprice,Moprice)VAL

24、UES(DD,6,300,4.6,5.0)执行结果4.总结与体会这次实验学到了很多,首先是创建数据库,还有表格,当然这个利用SQLSERVER2005的图形界面操作很简单,不过对于表的约束还是要注意的地方。然后是用T-SQL语言查询数据,利用WITN表达式,TOP,COMPUTE ,COMPUTE BY以及创建游标过程,通过实验学习的更加清晰。再之后就是在定义函数,这个教材讲的实在是太少,从网上学了学才算是搞明白。对于存储过程个人理解和自定义函数功能相似,实现较为简单。DML触发器这一块对于INSERT语句的触发的作用还是很总要的,触发操作是很总要的,对于数据的保护作用很强。不过对于数据库数据的添加真的很麻烦,希望下次老师能给予数据!

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!