实验九 视图的操作

实验九 视图的操作
实验内容
1、	请为三建工程项目建立一个供应情况的视图,包括供应商代码(SNO)、零件代码(PNO)、供应数量(QTY)。针对该视图完成下列查询:
答:代码如下:
--请为三建工程项目建立一个供应情况的视图,
--包括供应商代码(SNO)、零件代码(PNO)、供应数量(QTY)。
create view SAN_JIAN
as
select SNO,PNO,QTY
from SPJ,J
where SPJ.JNO=J.JNO and JNAME='三建';
 
(1)	找出三建工程项目使用的各种零件代码及其数量。
答:代码如下:
--找出三建工程项目使用的各种零件代码及其数量。
select distinct PNO,QTY
from SAN_JIAN;

(2)	找出供应商S1的供应情况。
答:代码如下:
--找出供应商S1的供应情况。
select *
from SAN_JIAN
where SNO='S1';

2、	打开“实验四”中的学生-课程数据库(S_T),完成以下实验。
建立信息系学生的视图(用with check option子句),

--建立信息系学生的视图(用with check option子句)
create view IS_student
as
select Sno,Sname,Sage,Sdept
from Student
where Sdept='IS'
with check option;
 
(1)	并向该视图中插入类似以下的语句:
insert into is_student1 (sno,sname,sage) 
values (‘20051100101’,‘王一’,20)
 
 
是否合理?如何更改?
答:不合理。
1、Student表中的Ssex列设置了不允许尾空值,而插入视图中的对应数据没有Ssex的数据。
2、在创建视图时指定了witch check option关键字,这也就是说,更新后的每一条数据仍然要满足创建视图时指定的where条件,所以我们这里发生了错误。
更改代码如下:
--先设置Student表中的Ssex属性允许为空
alter table Student
alter column Ssex char(2) null;
--再插入带有Sdept属性的值的数据
insert into IS_student(Sno,Sname,Sage,Sdept)
values ('20051100101','王一',20,'IS');
 
(2)	建立信息系选修了001号课程的学生的视图 。
答:代码如下:
--插入数据
insert into Course(Cno,Cname)
values('001','面向对象程序设计');
insert into SC
values
('20051100101','001',88),
('202215125','001',91);

--建立信息系选修了001号课程的学生的视图 。
create view IS_s1(Sno,Sname,Grade)
as
select Student.Sno,Sname,SC.Grade
from Student,SC
where Sdept='IS' and Student.Sno=SC.Sno and SC.Cno='001';	

(3)	在第(2)题创建的视图的基础上建立信息系选修了1号课程且成绩在90分以上的学生的视图。
答:代码如下:
--在第(2)题创建的视图的基础上建立信息系选修了1号课程且成绩在90分以上的学生的视图。
create view IS_s2
as
select * from IS_s1
where Grade>=90;
 
(4)	试图删除“选修”表(SC表),看看第(2)题与第(3)题建立的视图是否存在。
答:代码如下:
--试图删除“选修”表(SC表),看看第(2)题与第(3)题建立的视图是否存在。
drop table SC;
视图已不复存在。

你可能感兴趣的:(SQL数据库,数据库)