Oracle-视图

涎涎原创约 1595 字大约 5 分钟...OracleOracle

32-Oracle-视图.mdopen in new window

注意

本博文仅供学术研究和交流参考,严禁将其用于商业用途。如因违规使用产生的任何法律问题,使用者需自行负责。

章节目标

  • 通过本章学习,学员应达到如下目标:
    • 理解视图的作用、分类;
    • 掌握视图创建、修改、删除;
    • 掌握如何从视图中检索数据;

本章内容

数据库对象

表是用来存放用户数据的对象,由行和列组成,列就是字段,行就是表中的记录
约束保证数据完整性的规则,设置在单个字段或者多个字段组合上,写入这些字段的数据必须符合约束的限制
视图是一个命名的查询,用于改变基表数据的显示,通过视图能简化查询;访问方式与表相同
索引构建于表的单字段或都字段组合上,用于加速对表中数据的查询
序列产生顺序的不重复数据字串,被作为主键的束值的参照
同义词数据库对象的别名

什么是视图?

  • 视图是逻辑上来自一个或多个表的数据集合。

为什么使用视图

  • 限制其它用户对数据库表的访问,因为视图可以有选择性的显示数据库表的一部分;
  • 容易实现复杂的查询;
  • 对于相同的数据可以产生不同的视图;

视图分类

  • 视图分为简单视图和复杂视图,最基本差别在DML操作上
特征简单视图复杂视图
基表数量一个一个或多个
包含函数没有
包含数据组没有
通过视图实现DML操作可以不一定

创建视图

  • 创建视图语法;
CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW viewname
  [(column[, column]...)]
AS subquery
[WITH CHECK OPTION [CONSTRAINT constraintname]]
[WITH READ ONLY]
  • OR REPLACE:如果所创建的视图已经存在,该选项表示修改原视图的定义;

  • FORCE:不管视图所基于的基表是否存在,都会创建该视图;

  • NOFORCE:只有视图所基于的基表都存在,才会创建该视图;

  • viewname :视图的名称;

  • column :列名,列名的数量必须和视图所对应查询语句的列数量相等;

  • subquery:一条完整的SELECT语句;

  • WITH CHECK OPTION:一个约束条件,通过视图所插入或修改的数据行必须满足视图所定义的查询; constraintname:约束名;

  • WITH READ ONLY:确保在该视图上不能进行任何DML操作;

  • 例:创建一个视图v_emp10,通过该视图只能查看10号部门的员工编号,员工姓名,职位。

SQL> CREATE VIEW 	empvu10
  2  AS SELECT	empno, ename, job
  3  FROM			emp
  4  WHERE			deptno = 10;
View created.
  • 在用SQL*Plus中,可以使用DESC命令显示视图的结构。
SQL> DESC empvu10
  • 创建视图时,在子查询中使用列的别名
SQL> CREATE VIEW 	salvu30
  2  AS SELECT	empno EMPLOYEE_NUMBER, ename NAME,
  3				sal SALARY
  4  FROM				emp
  5  WHERE				deptno = 30;
View created.

创建复杂视图

  • 例:创建一个视图,通过该视图可以查看每个部门的名称,最低工资,最高工资,平均工资
SQL> CREATE VIEW	dept_sum_vu
  2    				(name, minsal, maxsal, avgsal)
  3  AS SELECT	d.dname, MIN(e.sal), MAX(e.sal),
  4				AVG(e.sal)
  5  FROM				emp e, dept d
  6  WHERE				e.deptno = d.deptno
  7  GROUP BY 	d.dname;
View created.
  • 从视图中检索数据,同从表中检索数据一样,只不过是只能看到视图所定义的那些列。
SQL> 	SELECT *
  2 	FROM	salvu30;
EMPLOYEE_NUMBER NAME          SALARY
--------------- ---------- ---------
           7698 BLAKE           2850
           7654 MARTIN          1250
           7499 ALLEN           1600
           7844 TURNER          1500
           7900 JAMES            950
           7521 WARD            1250

6 rows selected.

修改视图

  • 用 CREATE OR REPLACE VIEW子句修改视图empvu10,为每个列添加别名。
SQL> CREATE OR REPLACE VIEW empvu10
  2    	(employee_number, employee_name, job_title)
  3  AS SELECT 	empno, ename, job
  4  FROM				emp
  5  WHERE				deptno = 10;
View created.
  • CREATE VIEW子句中别名的顺序必须和内部查询中的列的顺序一一对应。

视图上执行DML操作的规则

  • 在简单视图上可以执行 DML 操作;
  • 您可以通过视图删除基表中数据,只要视图中不出现以下情况:
    • Group 函数;
    • GROUP BY 子句;
    • DISTINCT 关键字;
  • 您可以通过视图修改基表中数据,只要视图中不出现以下情况:
    • GROUP函数、GROUP BY子句,DISTINCT关键字;
    • 使用表达式定义的列;
    • ROWNUM 伪列;
  • 您可以通过视图向基表插入数据,只要视图中不出现以下情况:
    • GROUP函数、GROUP BY子句,DISTINCT关键字;
    • 使用表达式定义的列;
    • ROWNUM 伪列;
    • 基表中未在视图中选择的其它列定义为非空并且没有默认值;

WITH CHECK OPTION 子句

  • 如果要确保在视图上执行的DML操作仅限于一定的范围,便可使用WITH CHECK OPTION子句;
SQL> CREATE OR REPLACE VIEW empvu20
  2  AS SELECT	*
  3  FROM	        emp
  4  WHERE	        deptno = 20
  5  WITH CHECK OPTION CONSTRAINT empvu20_ck;
View created.
  • 在视图中任何修改部门编号的操作都会失败,因为这违反了 WITH CHECK OPTION约束。

拒绝 DML 操作

  • 在视图定义时使用WITH READ ONLY选项,可以确保不能对视图执行DML操作;
SQL> CREATE OR REPLACE VIEW empvu10
  2        (employee_number, employee_name, job_title)
  3  AS SELECT	empno, ename, job
  4  FROM				emp
  5  WHERE				deptno = 10
  6  WITH READ ONLY;
View created.
  • 任何试图执行DML的操作都会导致一个错误ORA-01752。

删除视图

  • 删除视图并不会删除数据,因为视图是基于数据库中的基表的虚表。
DROP VIEW view; 
SQL> DROP VIEW empvu10; 
View dropped.

相关数据字典

USER_VIEWS:字典中包含了视图的定义。
USER_UPDATABLE_COLUMNS:字典包含了哪些列可以更新、插入、删除。
USER_OBJECTS:字典中包含了用户的对象。

本节重点总结

  • 理解视图的作用、分类;
  • 掌握如何创建简单视图;
  • 掌握如何创建复杂视图;
  • 理解带约束视图的含义;
  • 理解只读视图的含义;
  • 掌握如何从视图中检索数据;
  • 掌握修改、删除视图;
  • 了解通过视图执行DML操作的规则;

分割线


相关信息

以上就是我关于 Oracle-视图 知识点的整理与总结的全部内容,希望对你有帮助。。。。。。。

上次编辑于:
贡献者: 涎涎
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.4