1、视图的特点
- 是一张虚表,是从一个或几个基本表(或视图)导出的表
- 只存放视图的sql定义,不存放视图对应的数据
- 基表中的数据发生变化,从视图中查询出的数据也随之改变
2、对视图的操作
定义视图
create view
视图名[(列名。。。)]
as
子查询
注意:
- 组成视图的属性列名要么全部省略,要么全部指定
- create view只是把视图定义存入数据字典,并不执行查询语句
- 对视图进行查询时,按视图的定义从基本表中将数据查出
视图分类
- 行列子集视图
若一个视图从单个基本表导出,并且只是去掉了基本表的某些行或某些列,保留了主码,称这类视图为行列子集视图 - 带表达式视图
在定义视图时根据需要设置一些派生列,这些派生列在基本表中并不实际存在,所以称为虚拟列,这类视图称为带表达式视图 - 分组视图
带聚集函数和group by子句的查询来定义视图,这类视图称为分组视图
删除视图
drop view 视图名 [cascade]
注意:
- 该语句只是从数据字典中删除指定视图的定义,不影响基表
- 如果该视图导出了其他视图,使用cascade级联删除语句,会把该视图和由它导出的所有视图一起删除
- 删除基表时,由该基表导出的所有视图定义必须显示使用drop view语句删除
查询视图
用户角度:查询视图与查询基本表相同
DBMS实现视图查询的方法:
–视图消解法:
- 进行有效性检查
- 转换成等价的对基本表的查询
- 执行修正后的查询
视图:
create view IS_Student
as
select sno,sname,sage
from student
where sdept=‘IS’
with check option;
查询语句:
select sno,sage
from IS_Student
where sage<20;
视图消解转换后的查询语句为:
select sno,sage
from student
where sdept=‘IS’ and sage<20;
但视图消解法也有局限,在某些情况下,视图消解法不能生成正确的查询语句,比如需要加在having后面的条件被拼接到了where后面就是错误的
关于with check option的解释:
对视图进行update、insert、delete操作时要保证更新、插入、删除的行满足视图定义中的条件表达式,如果没有where字句,则有无with check option都一样
更新视图
更新操作收到下列三条规则的限制:
- 如果视图是从多个基本表使用连接操作导出的,不允许更新
- 如果导出的视图使用了分组和聚集操作,不允许更新
- 如果视图是从单个基本表使用选择和投影操作导出,并且包含了基表的主键,即为行列子集视图,则可以执行更新操作
一些视图是不可更新的,因为对这些视图的更新不能唯一地有意义地转换成对相应基本表的更新
视图的作用
- 视图能简化用户的操作
- 视图使用户能以多种角度看待同一数据
- 视图能够对机密数据提供安全保护
- 适当的利用视图可以更清晰的表达查询