数据库原理与应用课程实验指导书
select 客户名称 from XSS where not exists (
select * from CP where exists (
select * from CPXSB x
where x.产品编号=CP.产品编号 and x.客户编号='' and not exists (
select * from CPXSB y
where y.客户编号=XSS.客户编号 and y.产品编号=CP.产品编号 ) ) )
and 客户编号 !=''
实验七
(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.产品编号,产品名称,价格,销售日期 as '购买日期',数量 as'购买数量'
from CP,XSS,CPXSB
where CP.产品编号=CPXSB.产品编号 and XSS.客户编号=CPXSB.客户编号
41
(3)创建分区视图:在CPXS数据库中创建CP1和CP2两个表,CP1表中为编号小于等于’’
产品数据,CP1表中为编号大于‘’产品数据,以分区列为产品编号, 创建可更新的分区视图VIEW_CP12。 create table CP1
(产品编号 char(6) primary key check(产品编号<=''), 产品名称 char(30) not null, 价格 real, 库存量 int,
产品简列 varchar(50) )
create table CP2
(产品编号 char(6) primary key check(产品编号>''), 产品名称 char(30) not null, 价格 real, 库存量 int,
产品简列 varchar(50) )
create view VIEW_CP12 as
select * from CP1 union all
select * from CP2
2、查询视图
(1)基于VIEW_CP_PRICE2000视图,查询价格在2000以下产品的产品编号、名称和价格。
select 产品编号,产品名称,价格 from VIEW_CP_PRICE2000
(2)基于VIEW_GMQK视图,查询各客户在20004年3月18日购买产品的情况。 select * from VIEW_GMQK where 购买日期='2004-3-18'
3、更新视图
利用T-SQL语句对于视图VIEW_12进行以下数据更新。 (1) 插入一条CP记录(’ '','数码相机',3500,2)。
42
数据库原理与应用课程实验指导书
insert into VIEW_CP12
values('','数码相机',3500,2,null)
(2) 将产品编号为’’的价格改为3000。 update VIEW_CP12 set 价格=3000 where 产品编号=''
(3) 删除产品编号为’’的产品。
delete VIEW_CP12 where 产品编号=''
4、修改视图
将VIEW_CP_PRICE2000视图不加密。 alter view VIEW_CP_PRICE2000 as
select* from CP where 价格<2000 with check option
5、删除视图
将VIEW-GMQK视图删除。 drop view VIEW_GMQK
实验八
1、声明游标
(1)使用SQL-92语法声明一只进只读游标CUR1:要求结果集2004年3月18日销售情况。
declare CUR1 insensitive cursor for
select *from CPXSB where 销售日期='2004-3-18' for read only
43
(2)使用T-SQL扩展声明一滚动动态游标CUR2:要求结果集为客户信息,并能通过该游标修改客户名称列。 declare CUR2 cursor scroll for
select * from XSS
for update of 客户名称
2、打开游标
打开CUR2游标。 open CUR2
3、读取游标中数据
编写程序,实现依次读取游标CUR2中各行数据。
fetch next from CUR2
while @@FETCH_STATUS=0 begin
fetch next from CUR2 end
4、关闭游标
关闭CUR2游标。 close CUR2
5、释放游标
释放CUR2游标。 deallocate CUR2
实验九
1、变量的定义和赋值
创建一名为 Customer_name的局部变量,并在SELECT语句中使用该变量查找“广电公司”购买产品的情况。
declare @Customer_name varchar(20) set @Customer_name='广电公司'
select 客户名称,CPXSB.*from CPXSB,XSS
where 客户名称=@Customer_name and XSS.客户编号=CPXSB.客户编号
44