题目
对XSCJ数据库完成以下视图操作。
1.创建XSCJ数据库上的CS_KC视图,包括计算机专业各学生的学号、其选
修的课程号及成绩。保证对该视图的修改都符合专业名为计算机这个条件。
create or replace view CS_KC
as
select XS.s_no,k_no,score
from XS ,XS_KC
where XS_KC.s_no=XS.s_no and s_pro='计算机'
with check option;
2.创建XSCJ数据库上的计算机专业学生的平均成绩视图CS_KC_AVG,包括
学号(在视图中列名为num)和平均成绩(在视图中列名为score_avg)。
(提示: CS_KC_AVG视图可以利用CS_KC视图导出)
create or replace view CS_KC_AVG(num,score_avg)
as
select s_no,round(avg(score))
from CS_KC
group by s_no;
3.在视图CS_KC中查找计算机专业的学生学号和选修的课程号。
select s_no,k_no
from CS_KC;
4.查找平均成绩在80分以上的学生的学号和平均成绩。
(提示:先创建学生平均成绩视图,再对视图进行查询)
select num, score_avg
from CS_KC_AVG
where score_avg >80;
5.创建视图CS_XS, 视图中包含数学专业的学生信息,并向CS_XS视图中插
入一条记录: ('081107', '李牧','数学','男', '1990-10-21', 50, NULL, NULL)。
create or replace view CS_XS
as
select * from XS
where s_pro ='数学'
with check option;
insert into CS_XS
values('081107','李牧','数学','男','1990-10-21',50,NULL,NULL);
6.将CS_XS 视图中所有学生的总学分增加8。
update CS_XS
set s_credit=s_credit+8;
7.将CS_KC视图中学号为081101的学生的101课程成绩改为90。
update CS_KC
set score = 90
where s_no='081101';
8.删除CS_XS中男同学的记录。
delete from CS_XS
where s_gender = '男';
9.将CS_XS视图修改为只包含计算机专业学生的学号、姓名和总学分。
alter view CS_XS
as
select s_no,s_name,s_credit
from XS
where s_pro = '计算机';
10. 将CS_XS视图删除。
drop view CS_XS;
笔记
1.创建
create [or replace]//替换
view 视图名 [(字段名列表)]
as
select语句
[with check option];
2.修改视图
2.1 修改视图指修改数据库中已经存在的视图的定义
使用CREATE OR REPLACE VIEW语句修改视图
create or replace
view 视图名 [(字段名列表)]
as
select语句
[with check option];
使用ALTER语句修改视图
alter view 视图名[(字段名列表)]
aS
select语句
[with check option];
3.删除视图
DROP VIEW视图名1[视图名2]......;
4.通过视图插入数据
使用insert语句可以通过视图向基表中插入一条数据。
insert [ into ]
视图名[ (字段名1,字段名2,......) ]
values (值1,值2,......);
5.通过视图修改数据
使用update语句可以通过视图修改基表中的数据。
Update 视图名
SET 字段名1 =新值1 [,字段名2=新值2...]
[WHERE 条件] ;
6.通过视图删除数据
如果视图来源于单个基表,使用delete语句可以通过视图删除基表中的数据。
Delete
From 视图名
[WHERE 条件];
7、总结讨论:当视图中包含包含哪些情况,视图的更新不能被执行?
创建视图的语句中使用了with check option,没有符合视图定义中where子句的条件
视图依赖于多张基表时插入数据
视图的字段中使用了聚合函数
视图的字段中使用了数学表达式
在定义视图的select语句中使用了distinct,group by,order by,having子句