--视图
定义:视图是将sql查询语句的结果动态保存到数据库中的一张虚拟表
权限要求: GRANT CREATE VIEW TO USER_NAME;
管理员身份才能授权;
GRANT CREATE VIEW TO SCOTT;
--语法:
CREATE [OR REPLACE] VIEW V_NAME[(别名1,别名2,..)] as
SQL语句
[WITH CHECK OPEN]--检查,可读写视图
[WITH READ ONLY]; --只读
--详细语法:
CREATE [OR REPLACE] [FORCE] VIEW '视图名'
AS SQL语句
[WITH [CASCADED|LOCAL] CHECK OPTION
[WITH READ ONLY]-- 只读。
参数 说明
OR REPLACE 若所创建的试图已经存在,Oracle 自动重建该视图
FORCE 不管基表是否存在,Oracle 都会自动创建该视图
SQL语句 一条完整的 SELECT 语句,可以在该语句中定义别名
WITH CHECK OPTION 数据表 插入或修改 的数据行,必须满足视图定义的约束
WITH READ ONLY 该视图上不能进行任何 DML 操作
FORCE 有的时候,创建视图时的表可能并不存在,但是以后可能会存在。
如果此时需要创建这样的视图,需要添加 FORCE 选项。
--基表:视图的来源表
注意:
/*
1.视图是基于表建立起来的,查询语句不包含函数和分组。
2.可以通过通过对视图的怎删改来更改基表数据
3.视图的结构和数据,是对数据表进行查询的结果。
4.根据创建视图时给定的条件,视图可以是一个数据表的一部分,也可以是多个基表的联合。
它存储了要执行检索的 查询语句的定义,以便在引用该视图时使用
5.查询该视图。就像使用表一样,去使用视图就可以了
*/
使用视图的优点:
/*简化数据操作:
视图可以简化用户处理数据的方式。
着重于特定数据:
不必要的数据 或 敏感数据,可以不出现在视图中。
视图提供了一个简单而有效的安全机制,可以定制不同用户对数据的访问权限。
提供向后兼容性:
视图使用户能够在表的架构更改时,为表创建向后兼容接口。
集中分散数据。
简化查询语句。
重用SQL语句。
保护数据安全。
共享所需数据。
更改数据格式*/
查看视图
SHOW CREATE VIEW '视图名';
修改视图
ALTER VIEW 视图名[(列明1,列明2..)]
as SQL查询语句
[WITH CHECK OPEN]
[WITH READ ONLY]
删除视图
DROP VIEW [IF EXISTS] 视图名1,[视图名2]..[RESTRICT|CASCADE];
-- RESTRICT:限制。
-- CASCADE:级联。
简单删除
DROP VIEW 视图名;
结论:
/*
视图其实是一个虚拟的表,它的数据其实来自于表。
如果更改了视图的数据,表的数据也自然会变化。
更改了表的数据,视图也自然会变化。
一个视图所存储的并不是数据,而是一条 SQL 语句。*/
需求:修改视图为 只读视图。
create or replace view 'view_owners'
as
select * from 'T_OWNERS' where ownertypeid = 1
with read only;
有的时候,创建视图时的表可能并不存在,但是以后可能会存在。
如果此时需要创建这样的视图,需要添加 FORCE 选项。
create or replace FORCE view 'view_TEMP'
as
select * from 'T_TEMP';
复杂视图,就是视图的 SQL语句 中,有 聚合函数 或 多表关联查询。
需求:创建视图,查询显示 业主编号,业主名称,业主类型名称。
create or replace view 'view_owners'
as
select o.id '业主编号', o.name '业主名称', ot.name '业主类型'
from 'T_OWNERS' o, 'T_OWNERTYPE' ot
where o.ownertypeid = ot.id;
修改该视图。
-- 更新成功。
update view_owners set '业主名称' = '范小冰' where '业主编号' = 1;
-- 更新失败。
update view_owners set '业主类型' ='普通居民' where '业主编号' = 1;
键保留表。
/*键保留表,是理解 连接视图修改限制 的一个基本概念。
该表的主键列 全部显示在视图中,并且它们的值 在视图中都是 唯一且非空的。
简单说,表的键值 在一个 连接视图 中也是 键值,那么就称这个表为 键保留表。*/
分组聚合统计查询
create view 'view_account_sum'
as -- 必须 + `money_sum` 别名
select year, month, sum(money) money_sum from 'T_ACCOUNT'
group by year, month
order by year, month;
物化视图
/*视图是一个 虚拟表(也可以认为是一条语句)。
视图 是指定的 查询语句,返回的 结果集。每次访问视图,都会导致这个 查询语句 被执行一次。
为了避免每次访问都执行这个查询,可以将这个查询结果集存储到一个 物化视图(也叫实体化视图)*/
物化视图 与 普通视图 相比的区别是。
/*物化视图 是建立的副本。
物化视图 类似于一张表,需要占用存储空间。
对一个 物化视图 查询的执行效率,与查询一个表是一样的。*/
11.oracle视图
最新推荐文章于 2024-07-04 00:24:45 发布