oracle数据库学习07

视图

视图其实就是一个或几个实体表导出的表,它本身不包含任何真实数据的虚拟表。数据库中只存放视图的定义,而不存放视图对应的数据。(我的理解:视图就是需要的时候把它从数据库中调出来的一个窗口,可以观察数据的变化,有点像大数据)

优点:

  • 简化用户操作;
  • 构建逻辑性;
  • 加强安全保护;
  • 表达清晰;

格式:

CREATE [FORCE | NOFORCE] [OR REPLACE] VIEW 视图名称[(别名)]
		AS
	子查询;

FORCE:表示要创建视图的表不存在也可以创建视图;
NOFORCE:表示要创建视图的表必须存在,否则无法创建;
OR REPLACE:表示视图的替换,如果创建的视图不存在则创建新的,如果试图已经存在,则将其替换。

例:创建一张基本工资大于2000的雇员信息的视图

CREATE VIEW v_myview
		AS
	SELECT * FROM emp WHERE sal>2000;

这时可将这条语句封装在视图中,以后直接调用该视图就行。

替换v_myview视图,定义新视图,显示每个部门的详细信息

 CREATE OR REPLACE VIEW v_myview
 		AS
 SELECT d.deptno,d.dname,d.loc,
 COUNT(e.empno) count,NVL(ROUND(AVG(sal),2),0)
 avg,NVL(SUM(sal),0) sum,
 	NVL(MAX(sal),0) max,NVL(MIN(sal),0) min
 FROM emp e,dept d
 WHERE e.deptno(+)=d.deptno
 GROUP BY d.deptno,d.dname,d.loc;

创建成功后,下面直接查询视图内容。

SELECT * FROM v_myview;

如果要对简单视图进行增删查改操作

CREATE OR REPLACE VIEW v_emp20
	AS
SELECT empno,ename,job,sal,deptno FROM emp WHERE deptno=20;

UPDATE v_emp20 SET ename='JAVA0', job = 'MANAGER' , sal = 2300 WHERE empno=6688;

DELETE FROM v_emp20 WHERE empno=6688;

INSERT INTO v_emp20(empno,ename,job,sal,deptno) VALUES(6688,'JASON','CLERK',1900,20);
COMMIT;

这时会影响原表数据

WITH CHECK OPTION子句

在创建视图的时候需要使用一些WHERE子句做一些条件的限制,视图创建完成后如果需要修改WHERE子句中的字段内容,则需通过WITH CHECK OPTION保证视图的创建

格式:

CREATE [FORCE | NOFORCE][OR REPLACE] VIEW 视图名称[(别名1,别名2,...)]
	AS
子查询[WITH CHECK OPTION][ CONSTRAINT 约束条件]];

WITH READ ONLY子句

让视图中所有字段不可更新,则通过WITH READ ONLY子句控制
格式:
CREATE [FORCE | NOFORCE] [OR REPLACE] VIEW 视图名称[(别名1,…)]
AS
子查询 [WITH CHECK OPTION][CONSTRAINT 约束名称]]
[WITH READ ONLY];

删除视图

DROP VIEW 视图名称

猜你喜欢

转载自blog.csdn.net/qq_41589243/article/details/84887605