一. 视图的定义
视图(view),也称虚表, 不占用物理空间,这个也是相对概念,因为视图本身的定义语句还是要存储在数据字典里的。视图只有逻辑定义。每次使用的时候, 只是重新执行SQL.
二. 视图分类
1. 简单视图 基于单个基表,且不包含函数和数据分组操作
select ename,job,sal from emp where job='CLERK';
create view v1 as select ename,job,sal from emp where job='CLERK';
create or replace view v2 as select * from emp where deptno=10 withread only; ====>只读视图
2. 复杂视图基于多个基表或视图
3. 物化视图
三.语法
CREATE[OR REPLACE][FORCE][NOFORCE]VIEW view_name
[(column_name)[,….n]]
AS
Select_statement
[WITH CHECK OPTION[CONSTRAINT constraint_name]]
[WITH READ ONLY]
REPLACE: 如果创建视图时, 已经存在此视图, 则重新创建此视图, 相当于覆盖
FORCE: 强制创建视图, 无论的视图所依赖的基表否存在或是否有权限创建
NOFORCE: 只有基表存在且具有创建视图权限时, 才可以创建视图
WITH CHECKOPTION 指出在视图上所进行的修改都要符合select_statement 所指定的限制条件
WITH READONLY 只允许查看视图
三.基本操作
1.查询视图: 可依赖于多个基表.
SELECT *FROM view_name; /* 类似于查询表数据*/
2. 插入数据
INSERT INTO view_name VALUES();
3. 修改数据:
UPDATE view_nameSET …
4. 删除数据:
Delete from view_name where …
同样, 当视图依赖多个基表时, 不能使用此语句来删除基表中的数据. 只能删除依赖一个基表的数据.
5. 删除视图:
DROP VIEW view_name;
四.视图操作
在视图定义中没有设定READ ONLY 的前提下, 如果视图包含了下面的内容, 那么不能通过视图删除表中的数据:
* 分组函数, 如SUM,AVG,MIN,MAX 等
* GROUP BY 子句
* 包含了表达式
* ROWNUM 伪列
selectowner,view_name from dba_views where owner='用户名'; è查看这个用户的视图
descdba_views 查看视图的结构