视图是基于一张表或多张表或另外一个视图的逻辑表。视图不同于表,视图本身不包含任何数
据。表是实际独立存在的实体,是用于存储数据的基本结构。而视图只是一种定义,对应一个查询
语句。视图的数据都来自于某些表,这些表被称为基表。通过视图来查看表,就像是从不同的角度
来观察一个(或多个)表。
视图有如下一些优点:
a可以提高数据访问的安全性,通过视图往往只可以访问数据库中表的特定部分,限制了用户访
问表的全部行和列。
b简化了对数据的查询,隐藏了查询的复杂性。视图的数据来自一个复杂的查询,用户对视图的
检索却很简单。
c一个视图可以检索多张表的数据,因此用户通过访问一个视图,可完成对多个表的访问。
d视图是相同数据的不同表示,通过为不同的用户创建同一个表的不同视图,使用户可分别访
问同一个表的不同部分。视图可以在表能够使用的任何地方使用,但在对视图的操作上同表相
比有些限制,特别是插入和修改操作。对视图的操作将传递到基表,所以在表上定义的约束条件和
触发器在视图上将同样起作用。
1、视图创建
create [or replace] [force|noforce] view view_name
[(alias[,alias]…)]
as subquery
[with check option [constraint constraint]]
[with read only]
例如:
创建视图 empv,该属兔仅包含 10部门雇员的细节信息。
create view empv
as select empno,ename,job
from emp
where deptno=10;
别名的使用
例 1:create or replace view salv
as select empno employee_id,ename name,sal salary
from emp where deptno=30;
例 2:create or replace view salv
(employee_id,name,salary)
as select empno,ename,sal
from emp
where deptno=30;
创建复杂视图
例:创建一个基于两个表并且含有组函数的复杂视图
create or replace view dept_sum_v(name,minsal,maxsal,avgsal)
as select d.dname,min(e.sal),max(e.sal),avg(e.sal)
from emp e,dept d where e.deptno=d.deptno group by d.dname;
2、视图操作
查看视图
数据字典 USER_VIEWS
select view_name,text from user_views;
从视图检索数据
select * from salv;
视图上执行 DML操作
a)如果视图包含以下内容,则不能实现对数据的修改:
-GROUP函数、GROUP BY子句、DISTINCT关键字
–使用表达式定义的列
-ROWNUM伪列
b)如果视图中包含以下内容则不能删除数据行
-GROUP函数
-GROUP BY子句
-DISTINCT关键字
-ROWNUM伪列
WITH CHECK OPTION子句
–如果要确保在视图上执行的插入、更新操作仅限于一定的范围,便可使用 WITH CHECK
OPTION子句
例:
create or replace view empv
as select * from emp where deptno=20
with check option constraint empv_ck;
测试一:update empv set deptno=10 where empno=7369
结果:
ERROR位于第 1行:
ORA-01402:视图 WITH CHECK OPTIDN违反 where子句
测试二:update empv set sal=2000 where empno=7369
结果:已更新 1行。
拒绝 DML操作
–在视图定义时使用 WITH READ ONLY选项可以确保不能对视图执行 DML操作
例:
create or replace view empv(employee_id,employ_name,job_title)
as select empno,ename,job from emp where deptno=10
with read only;
3、视图删除
删除视图并不会删除数据,因为视图是基于数据库中的基表
DROP VIEW view_name;
例:DROP VIEW empv;