Oracle从零开始15――表的管理05――视图

 

6.视图(重点)

功能:视图就是封装了一条复杂的查询语句

创建视图的语法:

CREATE VIEW 视图名称 AS 子查询;

    此时的子查询就表示一条非常复杂的语句。

范例:建立一个视图,包含了全部的20部门的雇员信息

说明scott没有这个权限,所以以超级管理员的身份登录,赋予scott这个权限

这样就可以创建视图了:

创建试图后看就可以像查表那样对视图进行查询操作

此时是通过视图找到的20部门的所有数据,也就是说可以使用视图包装需要的查询语句。

此时,视图中只包含了四个字段的信息,如果现在希望多包含一个,只能重新建立视图

此时,执行创建视图的语句之后,提示此名称已经存在,证明视图时无法重名的,那么此时只能先删除再重新建立视图

删除视图的语法:

DROP VIEW 视图名称;

但是如果所有的代码都这样去写会很麻烦,想要修改视图,就必须先删除视图,所以Oracle中为了方便用户修改视图,提供一个替换的命令,所以完整的视图创建语法是:

CREATE OR REPLACE VIEW 视图名称 AS 子查询;

使用以上的语法,再更改视图的时候就不用先删除了,系统会为用户自动进行删除及重建。

    视图可以封装复杂查询,那么下面封装一个之前已经存在的一个复杂查询,此查询是范例:要求查出部门名称、部门员工数、部门的平均工资、部门的最低收入雇员的姓名

SELECT d.dname,ed.c,ed.a,e.ename

FROM dept d,emp e,(

    SELECT deptno,COUNT(empno) c,AVG(sal) a,MIN(sal) min

    FROM emp

    GROUP BY deptno) ed

WHERE d.deptno=ed.deptno AND e.sal=ed.min;

如果在开发中每次都写这么长的语句,很不方便,因此将其建立成视图,以方便用户查询。以后直接查询视图就可以得到之前的结果。

范例:创建一个只包含20部门雇员的部门信息

下面进行更新视图的操作。在视图总是不应该包含真实数据的,而且在此程序中,创建的试图实际是存在创建条件的,此条件是deptno=20。如果此时把视图中的7369的部门编号修改为30.

范例:修改视图中的7369的部门编号

此时,已经提示视图更新成功,但是重新查询视图发现视图中已经没有7369这个雇员了,然而emp表中的7369雇员的部门编号已经修改为30了。这样做明显不合适,因为创建视图的时候是有条件的,你一旦修改之后,此条件就怕破坏了,所以在创建视图的时候,SQL提供了两个重要的参数:

WITH CHECH OPTION:不能更新视图的创建条件

范例:创建视图时使用WITH CHECH OPTION(首先回退,撤销刚才的修改)

创建条件不能更新,那么其他字段呢?

范例:7369雇员姓名修改为"史密斯"

但是视图本身作用还是用来查询的,所以不应该允许更改,所以可以使用第二个参数:

WITH READ ONLY:视图只读

范例:创建只读视图

 
 
 
 

 

你可能感兴趣的:(oracle,15,从零开始)