视图是从一个或几个基本表(或视图)导出的表,它与基本表不同,是一个虚表。数据库中只存放视图的定义,而不存放视图对应的数据,这些数据仍存放在原来的基本表中。
一、定义视图
create view <视图名>[(<列名1>[,<列名2>]...)]
as <子查询>
[with check option]
[with check option]表示对视图进行update、 insert、 delete操作时要保证更新、插入、删除满足视图定义中的谓词条件(即子查询中的条件表达式)。
例题
create view is_student
as
select sno,sname,sage
from student
where sdept='is';
create view语句结果只是把视图的定义存入数据字典并不执行其中的select语句。
例题
create view is_student
as select sno,sname,sage
from student
where sdept='is'
with check option;
若一个视图是从单个基本表导出的,并且只是去掉了基本表的某些行和某些列,但保留了主码,则称这类视图为行列子集视图。
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,2014-sage
from student;
例题中视图中的出生年份是通过计算得到的。
带有聚集函数和group by子句的查询来定义视图
create view s_g(sno,avg)
as select sno,avg(grade)
from sc
group by sno;
create view f_student(f_sno,sname,ssex,sage,sdept)
as select *
from student
where ssex='女';
二、删除视图
drop view <视图名>[cascade];
cascade 级联删除语句把该视图和由它导出的所有视图一起删除。
例题
drop view bt_s;
drop view is_s;
drop view is_s1 cascade;
删除视图is_s1和由它导出的所有视图
三、查询视图(表达查询语句时,与基本表的查询相同)
视图消解:从数据字典中取出的视图的定义,把定义中的子查询和用户查询结合起来,转换或等价的对基本表的查询。
例题
select *
from s_g
where gavg>=90;
四、更新视图
由于视图是不实际存储数据的虚表,对视图的更新最终要转换为基本表的更新。
例题
update is_student
set sname='刘辰'
where sno='201215122'
等价于
update student
set sname='刘辰'
where sno='201215122' and sdept='is'
五、视图的作用
1.视图能够简化用户的操作;
2.视图使用户的多种角度看待同一数据;
3.视图对重构数据库提供了一定程度的逻辑独立性;
4.视图能够对机密数据提供安全保护;
5.适当利用视图可以更清晰表达查询。