数据库对象-视图
文章目录
前言
这篇文章是关于视图的相关知识点。
提示:以下是本篇文章正文内容,下面案例可供参考
一、视图是什么?
1.视图的定义
视图是一种数据库对象,是从一个或者多个数据表或视图中导出的虚表,视
图所对应的数据并不真正地存储在视图中,而是存储在所引用的数据表中,视图
的结构和数据是对数据表进行查询的结果。
2.视图的优点
1.简化数据操作:视图可以简化用户处理数据的方式。
2.着重于特定数据:不必要的数据或敏感数据可以不出现在视图中。
3.视图提供了一个简单而有效的安全机制,可以定制不同用户对数据的访问权限。
4.提供向后兼容性:视图使用户能够在表的架构更改时为表创建向后兼容接口。
二、创建或修改视图语法
CREATE [OR REPLACE] [FORCE] VIEW V_viewname[(所有的列别名)] AS
subquery
[WITH CHECK OPTION]
[WITH READ ONLY]
选项解释:
OR REPLACE:如果该视图存在会替换该视图
FORCE:在创建的基表不存在时强制创建视图
subquery:一个完整的select查询语句
WITH CHECK OPTION:插入或修改的数据必须满足视图定义的约束,主要是select子句中的一些限制条件
WITH READ ONLY:只读,不能进行增删改的操作
三、删除视图语法
DROP VIEW view_name;
四、应用案例
1.简单视图
什么是简单视图?如果视图中的语句只是单表查询,并且没有聚合函数,我们就
称之为简单视图。
需求:创建一个视图,内容包含员工信息表中20号部门员工的工号、姓名和工资
CREATE VIEW V_EMP AS
SELECT EMPNO,
ENAME,
SAL
FROM EMP
WHERE DEPTNO = 20;
对视图进行一系列操作
insert into V_employeeinfo values(7521,'zhangsan',700);
insert into V_employeeinfo values(7526,'zhangsan',700);
delete from V_employeeinfo where empno = 7499;
update V_employeeinfo set ename = 'TOM' WHERE EMPNO = 7521;
commit;
结果,基表emp可以插入7526这条数据,查询该视图没有这条数据,因为不满足视图的条件
无法插入7521这条数据,因为违反基表唯一约束条件
对视图的删除和修改也同时在emp表上做了相同的改变
说明:
简单视图对视图进行增删改,在符合基表的约束条件下,会同时在基表进行同样的操作。
2.带检查约束的视图
需求:建立一个视图v_emp内容为部门编号为20的员工信息
DROP VIEW V_EMP;
CREATE VIEW V_EMP AS
SELECT EMPNO,
ENAME,
SAL
FROM EMP
WHERE DEPTNO = 30
WITH CHECK OPTION;
对视图进行一系列操作
insert into v_emp values(7521,'zhangsan',1000,40);
结果无法插入数据
说明:
带检查约束的视图需要满足视图的约束和基表的约束,在此基础上可以增删改查
3.只读视图
CREATE VIEW V_EMP AS
SELECT EMPNO,
ENAME,
SAL,
DEPTNO
FROM EMP
WHERE DEPTNO = 20
WITH READ ONLY;
说明:
只读视图只能进行读取,不能进行其他的操作。
4.复杂视图
所谓复杂视图,就是视图的SQL 语句中,有聚合函数或多表关联查询。
4.1多表关联查询视图
键保留表:
键保留表是理解连接视图修改限制的一个基本概念。如果一个表的主键列全部显示在视图中 并且它们的值在视图中都是唯一且非空的。也就是说,表的键值在一个连接视图中也是键值,那么就称这个表为键保留表。
CREATE VIEW V_DEPTEMP AS
SELECT D.DNAME,D.LOC,LOWER(ENAME) ENAME,SAL,COMM,SAL+NVL(COMM,0) SC
FROM DEPT_BAK D
LEFT JOIN EMP_BAK E
ON D.DEPTNO = E.DEPTNO;
SELECT * FROM V_DEPTEMP;
说明:
1.对于基表中原有的列,定义视图时可以不加别名;对于基表中原本没有的列,定义视图时必须加别名
2.这种视图一般来说无法进行增删改操作,(好像是键保留表的字段可以更新,而非键保留表的字段无法更新,但我没有验证成功)
4.2分组聚合统计查询的例子
需求:创建一个视图内容为每个部门的总收入
CREATE VIEW V_SUMSAL AS
SELECT DEPTNO,SUM(SAL) sum_sal
from emp
group by deptno
order by deptno;
说明:
该视图有聚合函数,需要起别名,无法进行增删改
4.3基于视图创建的视图
CREATE VIEW V_DEPTSUM AS
SELECT DNAME,SUM(NVL(SAL,0)) S_SAL
FROM V_DEPTEMP
GROUP BY DNAME;
五、物化视图
视图是一个虚拟表,是一个select查询结果集,每次查询视图都会导致查询语句执行一次。为了避免每次查询都执行一次可以将这个结果集存储到一个物化视图(也叫实体化视图)。
物化视图与普通的视图相比的区别是物化视图是建立的副本,它类似于一张
表,需要占用存储空间。而对一个物化视图查询的执行效率与查询一个表是一样的。
5.1创建物化视图语法
CREATE MATERIALIZED VIEW view_name
[BUILD IMMEDIATE | BUILD DEFERRED]
REFRESH [FAST | COMPLETE | FORCE]
[ON [COMMIT | DEMAND ] | START WITH (start_time) NEXT (next_time)]
AS subquery
参数说明:
BUILD IMMEDIATE:是在创建物化视图的时候就生成数据,(默认选项)
BUILD DEFERRED:在创建时不生成数据, 以后根据需要再生成数据。
刷新( REFRESH ):指当基表发生了 DML 操作后,物化视图何时采用哪种方式和基表进行同步。
刷新方法有三种: FAST 、 COMPLETE 、 FORCE 。
FAST:增量刷新,只刷新自上次刷新以后进行的修改 。
COMPLETE :对整个物化视图进行完全的刷新。
FORCE :Oracle 在刷新时会去判断是否可以进行快速刷新,如果可以则 采用 FAST 方式,否则采用 COMPLETE。(默认选项)
刷新的模式有两种:ON DEMAND 和 ON COMMIT
ON DEMAND:手动刷新物化视图(默认选项)。
ON COMMIT:指在基表发生 COMMIT 操作时自动刷新。
总结
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。