oracle经验之谈

15、视图

2018-10-21  本文已影响1人  小母牛不生产奶

视图:

        是一个封装了各种复杂查询的语句,就称为视图。


创建视图

 CREATE VIEW视图名字(字段) AS 子查询 


建立一个只包含 20 部门雇员信息的视图(雇员的编号、姓名、工资)

CREATE VIEW empv20 (empno,ename,sal)

AS

SELECT empno,ename,sal FROM emp WHEREdeptno=20 ; 


例如:将之前的一个复杂语句包装成视图显示部门内最低工资比 20 部门最低工资要高的部门的编号及部门内最低工资:

 SELECT deptno,MIN(sal) FROM emp

GROUP BY deptno

 HAVING

MIN(sal)>(SELECT MIN(sal)

FROM emp WHERE deptno=20) ;

 此时就可以将上面的复杂查询语句建立一张视图,之后查询视图即可。


高级视图

 如果要创建一个同名的视图,则必须先将之前的视图删除掉,再进行创建:  

DROP VIEW empv20 ; 

有些时候如果先删除再创建操作会比较麻烦,所以有时候最好的方式:如果视图存在则先自动删除,之后自动创建。

CREATE OR REPLACE VIEW empv20 (deptno,msal)AS (SELECT deptno,MIN(sal) FROM emp GROUP BY deptno HAVING MIN(sal)>(SELECTMIN(sal) FROM emp WHERE deptno=20)) ;  


WITH CHECK OPTION保护视图的创建规则

之前是按照部门编号建立的视图,所以不能修改部门编号:

   update empv20 SETename='tom' where empno=7369 ; 可以更新,更新的是名字,成功


WITH READ ONLY(只读,不可修改)

视图最好不要轻易的修改

 CREATE OR REPLACE VIEW empv20(empno,ename,sal,deptno) AS SELECT empno,ename,sal,deptno FROM emp WHEREdeptno=20 WITH READ ONLY;

 现在任意的字段都不可更改,所以现在的视图是只读的。

如果视图的基表有多行查询(比如:group by,distinct)那么该视图也是只读


查看视图

Select text from user_views;查看视图的创建语句

上一篇下一篇

猜你喜欢

热点阅读