千家信息网

【学习】SQL基础-015-视图

发表于:2024-10-11 作者:千家信息网编辑
千家信息网最后更新 2024年10月11日,1、本质:逻辑数据集,没有真正数据2、类型简单视图:不使用函数,不使用聚合;一般可以接受DML复杂视图:使用函数和聚合;不能接受DML3、原理oracle 访问 user_views 数据字典,找到视
千家信息网最后更新 2024年10月11日【学习】SQL基础-015-视图1、本质:逻辑数据集,没有真正数据

2、类型
简单视图:不使用函数,不使用聚合;一般可以接受DML
复杂视图:使用函数和聚合;不能接受DML

3、原理
oracle 访问 user_views 数据字典,找到视图的子查询并执行,返回数据;
访问视图,实际是访问基表;
视图是存放在数据字典中的一条子查询。

4、创建
前提:create view 权限
语法:

参数:
force: 即使子查询中明细表不存在,也创建视图。
noforce: 默认值,如果明细表不存在,则引发错误。

with check option 加约束进行检查,对视图进行 dml 操作时,检查创建时的 where 条件。 确保DML在特定范围内操作
with read only 只能进行查询,不能通过视图修改基表。 禁止DML操作

5、应用例
查询表空间的使用情况
create view tablesp_usage as
select a.tablespace_name as tablespace_name,
to_char(a.total/1024/1024,99999999) as total_mb,
to_char((a.total-b.free)/1024/1024,99999999) use_mb,
to_char(b.free/1024/1024,99999999) as free_mb,
to_char(((total-free)/total)*100,999.99) as "Used %"
from
(select tablespace_name,sum(bytes) as total from dba_data_files
group by tablespace_name) a,
(select tablespace_name,sum(bytes) as free from dba_free_space
group by tablespace_name) b
where a.tablespace_name=b.tablespace_name order by 5 desc;

6、删除
drop view 不会删除基表数据
0