数据库实验:视图
实验内容
1. 实验目的
2. 实验内容和要求
3. 实验重点和难点
4、实验过程
实验分析
熟悉SQL语言有关视图的操作,能够熟练使用SQL语句来创建需要的视图,定义数据库外模式,并能使用所创建的视图实现数据管理。
针对给定的数据库模式,以及相应的应用需求,创建视图和带WITH CHECK OPTION的视图,并验证视图WITH CHECK OPTION选项的有效性。理解和掌握视图消解执行原理,掌握可更新视图和不可更新视图的区别。
实验重点:创建视图
实验难点:可更新的视图和不可更新的视图之区别,WITH CHECK OPTION的验证。
(1)创建视图(省略视图列名)
创建一个“海大汽配”供应商供应的零件视图V_DLMU_PartSupp1,要求列出供应零件的编号、零件名称、可用数量、零售价格、供应价格和备注等信息。
涉及Part.partkey, Part.name, PartSupp.availqty, Part.retailprice, PartSupp.supplycost, Part.comment,Supplier
CREATE VIEW V_DLMU_PartSupp1
AS
SELECT P.Partkey,P.Name,PS.Availqty,P.Retailprice,PS.Supplycost,P.Comment
FROM Part P,PartSupp PS
WHERE P.Partkey = PS.partkey AND PS.Suppkey IN(
SELECT Suppkey
FROM Supplier S
WHERE S.Name = '海大汽配'
(2)创建视图(不能忽略列名的情况)
创建一个视图V_CustAvgOrder,按顾客统计平均每个订单的购买金额和零件数量,要求输出顾客编号,姓名,平均购买金额和平均购买零件数量。
涉及Customer, Orders, Lineitem
CREATE VIEW V_CustAvgOrder(Custkey,Name,Avgprice,Avgquan)
AS
SELECT O.Custkey,C.Name,AVG(O.Totalprice),AVG(L.Quantity)
FROM Customer C,Orders O,Lineitem L
WHERE C.Custkey = O.Custkey AND L.Orderkey = O.Orderkey
GROUP BY O.Custkey,C.Name
-- 以 Custkey和 Name为依据排序,结果为分组属性和集合函数
(3)创建视图(WITH CHECK OPTION)
使用WITH CHECK OPTION,创建一个“海大汽配”供应商供应的零件视图V_DLMU_PartSupp2,要求列出供应零件的编号、供应商编号、可用数量和供应价格信息。然后通过该视图分别增加、删除和修改一条“海大汽配”零件供应记录,验证WITH CHECK OPTION是否起作用。
涉及PartSupp中partkey,suppkey,availqty,supplycost
Supplier.name
CREATE VIEW V_DLMU_PartSupp2
AS
SELECT Partkey,Suppkey,Availqty,Supplycost
FROM PartSupp
WHERE Suppkey = (
SELECT Suppkey
FROM Supplier
WHERE Name = '海大汽配')
WITH CHECK OPTION
INSERT INTO V_DLMU_PartSupp2 VALUES(10086,2020,600,66666);
执行出错,供应商“海大汽配” 对应的供应商编号不是 “2020”。
UPDATE V_DLMU_PartSupp2 SET Supplycost = 10
WHERE Suppkey = 55555;
执行通过,满足WITH CHECK OPTION条件。
DELETE FROM V_DLMU_PartSupp2
WHERE Suppkey = 65521;
执行出错,不满足WITH CHECK OPTION条件。
实验主要练习了创建视图相关的SQL语句操作。创建视图的时候如果可以省略列名,则视图列名使用选择的属性列列名;也可以指定列名(创建视图时指定,与属性列一一对应)。WITH CHECK OPTION表示视图里面所有的元组都要满足WHERE子句中的条件,无论时修改前还是修改后都必须遵从此规则。透过视图进行的插入、更新或删除操作,都需要符合视图定义中的谓词条件。使用WITH CHECK OPTION需要视图中有WHERE子句,否则该语句是多余的。