2015-12-01 视图

建立信息系学生的视图
create view is_student
as
select sno,sname,sage
from student
where sdept='is';
建立信息系学生的视图,并要求进行修改和插入操作时仍需保证该视图只有信息系的学生
create view is_student
as
select sno,sname,sage
from student
where sdept='is'
WITH CHECK OPTION;
在定义视图时加上WITH CHECK OPTION子句,以后对该视图进行插入,修改和删除操作时,RDBMS会自动加上sdept='is'的条件

建立信息系选修了1号课程的学生的视图
create view is_s1(sno,sname,grade)
as
select student.sno,sname,grade
from student,sc
where sdept='is' and
student.sno=sc.sno and
sc.cno=1;

建立信息系选修了1号课程且成绩在90分以上的学生的视图
create view is_s2
as
select sno,sname,grade
from is_s1
where grade>=90;

定义一个反映学生出生年份的视图
create view bt_s(sno,sname,sbirth)
as
select sno,sname,2004-sage
from student;

将学生的学号及他的平均成绩定义为一个视图
create view s_g(sno,grade)
as
select sno,avg(grade)
from sc
group by sno;

将student表中所有女生记录定义为一个视图
create view f_student(f_sno,name,sex,age,dept)
as
select *
from student
where ssex='女';

在信息系学生的视图中找出年龄小于20岁的学生
select sno,sage
from is_student
where sage<20;

查询选修了1号课程的信息系学生
select is_student.sno,sname
from is_student,sc
where is_student.sno=sc.sno and sc.sno='1';

查询平均成绩在90分以上的学生学号和平均成绩
select sno,avg(grade)
from sc
where avg(grade)>=90
group by sno;

由于视图是不实际存储数据的虚表,因此对视图的更新,最终要转换为对基本表的更新。
为防止用户通过视图对数据进行增加,删除,修改时,有意无意地对不属于视图范围内的基本表数据进行操作,可在定义视图时加上WITH CHECK OPTION子句。这样在视图上增删改数据时,RDBMS会检查视图定义中的条件,若不满足条件,则拒绝执行该操作。

将信息系学生视图is_student中学号为200215122的学生姓名改为"刘辰"
update is_student
set sname='刘辰'
where sno='200215122';
转换后的更新语句为
update student
set sname='刘辰'
where sno='200215122' and sdept='is';

视图的作用:
简化用户操作
使用户能以多种角度看待同一数据
视图对重构数据库提供了一定程度的逻辑独立性
能够对机密数据提供安全保护
适当地利用属兔可以更清晰的表达查询

原文地址:https://www.cnblogs.com/daochong/p/5011886.html