视图类似表,但有区别,考点就是在视图与表的区别!
视图:不是基本表,是从一个或多个基本表(或视图)中导出的表,是虚表,只有结构没有数据
一、定义视图
create view<视图名> [(<列名>[,<列名>]...)] as <子查询> [with check option];
with check option表示对视图进行update、insert和delete时,要保证更新、插入或删除的行满足视图中定义的谓语条件(即子查询的条件表达式);
组成视图的属性列必须全部指定或者是全部省略。以下三种情况是必须明确指定组成视图的所有列名
1)某个目标列不是单纯的属性名,而是聚集函数或列表达式;
2)多表连接时,选出几个同名列作为师徒的字段;
3)需要在视图中为某个列启用新的更合适的名字。
1 create view IS_Student as selet Sno,Sname,Sage from Student where Sdept='IS';
2 create view IS_Student as select Sno,Sname,Sage from Student where Sdept='IS' with check option;
3 create view IS_S1(SNO,Sname,Grade) as select Student.Sno, Sname,Grade from Student, SC where Sdept='IS' and Sthdent.Sno=Sc.Sno and SC.Cno='1';
二、删除视图
drop view <视图名>;
三、查询视图
select * from IS_Student where Sage<20;等价于查询基本表
select Sno,Sname,Sage from Student where Sdept='IS' and Sage<20;
四、更新视图
update IS_Student set Sname='刘表‘ where Sno='95020';
注意!关系数据库中一般不允许更新的视图有:
- 视图由两个以上基本表导出;
- 视图的字段来自字段表达式或常数;
- 师徒得子段来自聚焦函数;
- 视图定义中含group by字句;
- 视图定义中含dinstinct短语
- 视图定义中含嵌套查询
- 一个不允许更新的视图上定于的视图也不允许更新
五、视图的作用
- 简化用户的操作,比如简化数据查询
- 使用户能多种角度看问题,把注意力集中在关心的数据上(而不是全部数据)
- 通过引入视图可以提高数据的安全性
- 视图提供了一定成俗的逻辑独立性