WHERE 销售日期= '2004-03-18' )
截图如下:
4、查询购买了所有产品的客户的名称。
SELECT 客户名称 FROM XSS
WHERE NOT EXISTS
(SELECT * FROM CP
WHERE NOT EXISTS
(SELECT * FROM CPXSB
WHERE CPXSB.产品编号=CP.产品编号
AND XSS.客户编号=CPXSB.客户编号))
截图如下:
5、查询购买了客户编号为“000001”的客户购买的所有产品的客户的名称。
SELECT 客户名称 FROM XSS
WHERE NOT EXISTS
(SELECT * FROM CP WHERE EXISTS
(SELECT *
FROM CPXSB CPXSB1
WHERE CPXSB1.产品编号=CP.产品编号
AND CPXSB1.客户编号='000001') AND NOT EXISTS
(SELECT *
FROM CPXSB CPXSB2
WHERE CPXSB2.产品编号=CP.产品编号 AND CPXSB2.客户编号=XSS.客户编号 AND XSS.客户编号!='000001') )
截图如下:
四、试验心得
通过本次课程的学习与试验,学会了用IN子查询、EXISTS子查询与集函数进行表的嵌套查询,只是在IN子查询用EXISTS子查询转换的时候脑袋有点转不过来,需要想很久才能想明白这二者之间的关系,很是头痛。只有通过大量的练习与理解才能熟练使用,融会贯通。
试验六 视图与索引的创建与管理
一、试验目的与要求
1、熟练掌握使用界面和T-SQL语句创建、查询、更新和删除视图。 2、进一步掌握视图与基本表的联系与区别。 3、理解索引的概念和作用。 4、熟练掌握索引的创建与删除。
二、试验内容
对于CPXS数据库,完成如下操作: 1、创建视图
(1)在产品销售数据库CPXS中创建价格小于2000的产品视图VIEW_CP_PRICE2000,要求加密并保证对该视图的更新都要符合价格小于2000这个条件,写出利用界面的创建过程和对应的T-SQL语句。
(2)打开查询分析器,用T-SQL语句创建各客户购买产品的情况VIEW_GMQK视图,包括客户编号、客户名称、产品编号、产品名称、价格,购买日期、购买数量。
(3)创建分区视图:在CPXS数据库中创建CP1和CP2两个表,CP1表中为编号小于等于?100010?产品数据,CP2表中为编号大于?100010?产品数据,以分区列为产品编号, 创建可更新的分区视图VIEW_CP12。 2、查询视图
(1)基于VIEW_CP_PRICE2000视图,查询价格在2000以下产品的产品编号、名称和价格。
(2)基于VIEW_GMQK视图,查询各客户在20004年3月18日购买产品的情况。 3、更新视图
利用T-SQL语句对于视图VIEW_CP12进行以下数据更新。 (1)插入一条CP记录(?100042?,?数码相机?,3500,2)。 (2)将产品编号为?100042?的价格改为3000. (3)删除产品编号为?100042?的产品。 4、修改视图
将VIEW_CP_PRICE2000视图不加密。 5、删除视图
将VIEW_GMQK视图删除。 6、索引的创建和删除
(1)对CP表,在产品名称上定义一个唯一非聚簇的索引ind_cp。
(2)先创建各客户购买产品的强情况VIEW1视图,包括客户编号、客户名称、产品编号、产品名称、价格、购买日期、购买数量,然后在客户编号+产品编号+购买日期定义一个唯一聚簇索引ind_view1。
7、索引的删除
删除索引ind_view1。
三、试验步骤
1、创建视图
(1)在产品销售数据库CPXS中创建价格小于2000的产品视图VIEW_CP_PRICE2000,要求加密并保证对该视图的更新都要符合价格小于2000这个条件,写出利用界面的创建过程和对应的T-SQL语句。
CREATE VIEW VIEW_CP_PRICE2000 WITH ENCRYPTION AS SELECT * FROM CP
WHERE 价格<2000 WITH CHECK OPTION
截图如下:
(2)打开查询分析器,用T-SQL语句创建各客户购买产品的情况VIEW_GMQK视图,包括客户编号、客户名称、产品编号、产品名称、价格,购买日期、购买数量。
CREATE VIEW VIEW_GMQK AS
SELECT XSS.客户编号,客户名称,CP.产品编号,产品名称,价格,CPXSB.销售日期,数量 FROM XSS,CP,CPXSB
WHERE XSS.客户编号=CPXSB.客户编号 AND CPXSB.产品编号=CP.产品编号
截图如下:
(3)创建分区视图:在CPXS数据库中创建CP1和CP2两个表,CP1表中为编号小于等于?100010?产品数据,CP2表中为编号大于?100010?产品数据,以分区列为产品编号, 创建可更新的分区视图VIEW_CP12。
//创建表CP1并插入数据 CREATE TABLE CP1
(产品编号char(6) PRIMARY KEY CHECK (产品编号< '100010'), 产品名称char(30), 价格float,
库存量int,
产品简列varchar(50) )
INSERT INTO CP1 SELECT * FROM CP
WHERE 产品编号<'100010' //创建表CP2并插入数据 CREATE TABLE CP2
(产品编号char(6) PRIMARY KEY CHECK (产品编号> '100010'), 产品名称char(30),
价格float, 库存量int,
产品简列varchar(50) )
INSERT INTO CP2 SELECT * FROM CP
WHERE 产品编号>'100010' //创建分区视图
CREATE VIEW VIEW_CP12