SQL数据库实验报告Word文档格式.docx
《SQL数据库实验报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《SQL数据库实验报告Word文档格式.docx(27页珍藏版)》请在冰点文库上搜索。
CREATETABLECustomers
(
CustomerIDintIDENTITY(1,1)PRIMARYKEY,
CNamevarchar(8)NOTNULL,
Addressvarchar(50),
Cityvarchar(10),
Telvarchar(20)UNIQUE,
Companyvarchar(50),
Birthdaydatetime,
TypetinyintDEFAULT1
);
CREATETABLEGoods
GoodsIDintCONSTRAINTC1PRIMARYKEY,
GoodsNamevarchar(20)NOTNULL,
Pricemoney,
Decriptionvarchar(200),
Storageint,
Providervarchar(50),
StatustinyintDEFAULT(0)
CREATETABLEOrders
OrderIDintIDENTITY(1,1)CONSTRAINTC2PRIMARYKEY,
GoodsIDintNOTNULLREFERENCESGoods(GoodsID)ONDELETECASCADE,
*表级完整性约束条件,参照约束为Goods(GoodID),删除时进行级联删除*
CustomerIDintNOTNULLFOREIGNKEY(CustomerID)
REFERENCESCustomers(CustomerID)ONDELETENOACTION,
*表级完整性约束条件,参照约束为Customers(CustomerID),删除时不删除参照表中的被引用行*
QuantityintNOTNULLCONSTRAINTC3CHECK(Quantity>
0),
OrdersummoneyNOTNULL,
OrderDatadatetimeDEFAULT(getdate())
实验3表数据的插入、修改和删除
掌握使用T_SQL语句和企业管理器对数据进行插入、修改和删除数据的操作,并体会数据完整性约束的作用,加深对数据完整性及其约束的理解。
通过本实验,要熟练掌握INSERT、UPDATE、DELETE语句的语法和使用方法。
(1)向数据库Market的各张表中输入一些记录。
(2)使用T_SQL语句进行插入、修改和删除记录的操作。
*在Customers表中已有数据的基础上向各个表中插入数据*
INSERTINTOCustomers(CName,Address,City,Tel,Company,Birthday)
VALUES('
王伟'
'
长安区'
西安'
029005'
邮电大学'
'
*向Goods表中插入数据*
INSERTINTOGoods(GoodsID,GoodsName,Price,Decription,Storage,Provider,Status)
0001'
书包'
45.00,'
双肩包'
20'
舒适'
1'
*修改表中的数据*
UPDATEGoods*将Goods表中的所有价钱都增加*
SETPrice=Price+10;
UPDATEOrders
SETQuantity=5
WHERECustomerID=2;
*将Orders表中CustomerID为的客户订单数量修改为*
UPDATECustomers
SETTel=,Address='
WHERECustomerID=3;
修改后的表:
*删除表中的一些数据*
DELETEFROMOrders
*删除了CustomerID为的订单记录*
删除记录之后的表:
实验4数据的简单查询和连接查询
数据查询时数据库中最基本的操作,也是使用最频繁的操作,因此必须掌握SQL的查询语句(SELECT语句)的使用方法。
本实验要求掌握简单表的数据查询、数据排序和多表操作时数据连接查询的操作方法。
(1)简单查询操作。
该实验包括投影、选择条件表达、数据排序等。
在数据库Market的客户表Customers、货品表Goods、订单表Orders中完成第3章习题6中
(1)-(4)的查询。
(2)连接查询操作。
该实验包括等值连接、自然连接、一般连接(内连接)、外连接、左外连接、右外连接和自然连接等。
在数据库Market的客户表Customers、货品表Goods、订单表Orders中完成第3章习题6中(5)的查询。
(一)简单查询操作
1,查找所有西安客户的信息
*查询*
SELECT*
FROMCustomers
WHERECity='
;
*查找所有西安客户的信息*
2.查找所有商品的名称,库存,价格以及表示打折价,按升序排列
SELECTGoodsName,Storage,Price,0.25*PriceDiscount
FromGoods
ORDERBYPriceASC;
*查找所有商品的名称,库存,价格以及表示打折价,按升序排列*
3.查找商品名中包含“衣”的商品编号,名称及价格
SELECTGoodsID,GoodsName,Price
WHEREGoodsNameLIKE'
%衣%'
*查找商品名中包含“衣”的商品编号,名称及价格*
4.查询库存量大于小于的商品名称,库存和单价
SELECTGoodsName,Storage,Price
WHEREStorage>
100ANDStorage<
500;
*查询库存量大于小于的商品名称,库存和单价*
(二)连接查询操作
查找2011年1月1日至2012年1月1日期间,订货金额大于2的所有订单的客户姓名,商品名称,单价,订货数量和订货金额
*连接查询*
SELECTGoodsname,Cname,Price,Quantity,Ordersum
FROMCustomers,Goods,Orders
WHERECustomers.CustomerID=Orders.CustomerIDand
Goods.GoodsID=Orders.OrderIDand
Orderdatabetween'
'
and'
andQuantity>
2
实验5数据库的复杂查询
进一步掌握SELECT语句的使用方法,通过实验能够熟练地使用SELECT语句。
本实验要求掌握嵌套查询和统计查询的操作方法。
在数据库Market的客户表Customers、货品表Goods、订单表Orders中完成第3章习题6中(6)-(9)的查询。
三、运行结果
(1)查找订单编号,商品编号,客户编号,按日期对订单分组,显示订货数量不超的订单信息
SELECTOrderID,GoodsID,CustomerID
FROMOrders
WHEREQuantity<
=30
(SELECTOrderdata
groupbyOrderdata);
(7)查找所有西安客户的订单信息,要求用不相关子查询完成
WHERECustomerIDin
(SELECTCustomerID
(8)查找不是上海客户的订单信息
WHERECity<
>
上海'
(9)查找所有西安客户的相关信息以及他们的订单情况
FROMCustomers,Orders
WHERECustomers.CustomerID=Orders.CustomerIDandCity='
实验6索引和视图
(1)理解索引和视图的概念。
(2)掌握索引的使用方法。
(3)掌握视图的定义和使用方法。
在Market数据库中,完成第3章习题11中
(1)的建立视图的操作,然后在该视图上完成第3章习题11中
(2)的查询操作。
CREATEVIEWXIAN_ORDER(OrderID,GoodsName,Quantity,CustomerID,Cname)
AS
SELECTOrderID,GoodsName,Quantity,Orders.CustomerID,Cname
FROMOrders,Goods,Customers
WHERECustomers.CustomerID=Orders.CustomerIDANDGoods.GoodsID=Orders.OrderIDANDCity='
*创建西安客户订单的视图*
FROMXIAN_ORDER*查找西安客户的订单信息*
实验7存储过程
理解存储过程的概念,掌握存储过程的使用方法。
(一)在Market数据库中,完成第4章习题5中
(1)-(4)创建存储过程的操作,并使用EXCEL语句调用这些存储过程执行,观察他们的执行过程。
(二)在Market数据库中,进一步完成以下操作。
1.创建一个存储过程Goods_Orders1,查看任何指定货物的订单情况,包括订单号、订货客户的姓名以及订货数量等(要使用输入参数)。
2.执行存储过程Goods_Orders1时,如果没有给出参数,则系统会报错,如果希望不给出参数是能查出所有货品的订单,则可以用默认参数值来实现。
为此要求创建另一个存储过程Goods_Orders2来完成此功能。
3.创建一个存储过程Goods_OrderSum,来获得某个货品的订单总额(要使用输入以及输出参数)。
(一)
(1)第4章习题5中
(1)-(4)创建存储过程的操作结果如下
*为上海客户建立存储过程*
CREATEproceduresp_shanghai
FROMcustomers
WHEREcity='
CREATEproceduresp_Goods
@GoodsIDchar(20)
ASSELECTGoods.GoodsID,GoodsName,Price,Provider,Storage,Status
FROMGoods
*创建存储过程sp_Goods,查看制定商品信息,商品编号作为输入参数*
*以客户编号作为输入参数,订单总金额作为输出函数,建立存储过程*
CREATEproceduresp_goodsum
@Cnumberchar(10),
@Osumintoutput
SELECT@osum=Ordersum
WHERECustomerID=@cnumber
*编写存储过程sp_insertGoods,向Goods中插入一条记录*
CREATEproceduresp_insertGoods
@GoodsIDvarchar(20)VARCHAR(200)VARCHAR(50),@StatusTINYINT
insertintoGoods
values(@@@@Status);
创建一个存储过程Goods_Orders1,查看任何指定货物的订单情况,包括订单号、订货客户的姓名以及订货数量等(要使用输入参数)*
CREATEprocedureGoods_Orders1
@GoodsIDint,
@OrderIDintvarchar(20)intmoneydatetimeoutput
SELECTOrderID,CName,Quantity,OrderSum,Orderdata
FROMOrders,Customers
WHERECustomers.CustomerID=Orders.CustomerIDandGoodsID=@GoodsID;
*1.
.执行存储过程Goods_Orders1时,如果没有给出参数,则系统会报错,如果希望不给出参数是能查出所有货品的订单,
则可以用默认参数值来实现。
为此要求创建另一个存储过程Goods_Orders2来完成此功能
CREATEprocedureGoods_Orders2
@GoodsIDint=NULL
IF@GoodsIDisNULL
BEGIN
SELECTOrderID,CName,Quantity,OrderSum,Orderdata
FROMOrders,Customers
WHERECustomers.CustomerID=Orders.CustomerID
END
ELSE
WHERECustomers.CustomerID=Orders.CustomerIDandGoodsID=@GoodsID
END
*3.创建一个存储过程Goods_OrderSum,来获得某个货品的订单总额(要使用输入以及输出参数)*
CREATEprocedureGoods_OrderSum
@GoodsNamevarchar(20),
@OrderSummoneyoutput
SELECTOrderSum
FROMOrders,Goods
WHEREGoods.GoodsID=Orders.GoodsIDandGoodsName=@GoodsName;
实验8触发器
学习触发器的使用,体会触发器执行的时机,加深对触发器功能和作用的理解。
(1)在Market数据库中,完成第4章习题5中(5)-(9)创建触发器的操作,然后在相关的表上执行INSERT、UPDATE或DALETE语句,观察他们的执行结果。
五.代码设计技巧及体会
首先,我觉得自己使用SQL就比较生疏,刚开始不是很了解,可是通过几次上机试验后对于程序运行环境有了进一步的了解,为写代码和使用SQL打下了基础,第一次写了这么多的语句,遇到了很多困难,有些在书上找不到,需要自己认真思考,根据书上的例子进行变通,不会的时候就请教了老师或者同学,解决了一大部分的问题,自己对于SQL语句也有更进一步的了解,到后来能够自己去写代码而不用参考教材,这其中真的学到了不少东西,不足的地方还是有的,有一小部分的问题还等待在日后的学习中去解决。
源代码:
(
惠敏'
海淀区'
北京'
010001'
中国农业大学'
王二小'
浦东新区'
021001'
上海商学院'
周颖'
临潼区'
029006'
西安科技大学'
吴起'
槐荫区'
山东'
058436'
山东师范'
0002'
水杯'
32.00,'
塑料'
322'
特百惠'
0003'
上衣'
100.22,'
长款'
18'
春季适用'
0004'
风衣'
128.22,'
28'
秋季适用'
0005'
短裤'
56.88,'
超短'
50'
夏季适用'
*向Orders表中插入数据,其中有错误数据的测试*
INSERTINTOOrders(GoodsID,CustomerID,Quantity,Ordersum,OrderData)
4'
2'
3'
5'
10'
INSERTINTOOrders(GoodsID,CustomerID,Quantity,Ordersum,OrderData)*该语句错误,应为赋给OrderID的值没有参照表Orders*
0006'
UPDATEGoods*将Goods表中的所有价钱都增加10*
SETQua