• 1. 视图
  • 2. 目标通过本章学习,您将可以: 描述视图 创建和修改视图的定义,删除视图 从视图中查询数据 通过视图插入, 修改和删除数据 创建和使用临时视图 使用“Top-N” 分析
  • 3. 常见的数据库对象对象 描述 表 基本的数据存储集合,由行和列组成。 视图 从表中抽出的逻辑上相关的数据集合。 序列 提供有规律的数值。 索引 提高查询的效率 同义词 给对象起别名
  • 4. 视图表EMPLOYEES :
  • 5. 为什么使用视图控制数据访问 简化查询 数据独立性 避免重复访问相同的数据
  • 6. 简单视图和复杂视图特性 简单视图 复杂视图 表的数量 一个 一个或多个 函数 没有 有 分组 没有 有 DML 操作 可以 有时可以
  • 7. 创建视图在CREATE VIEW语句中嵌入子查询 子查询可以是复杂的 SELECT 语句CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view [(alias[, alias]...)] AS subquery [WITH CHECK OPTION [CONSTRAINT constraint]] [WITH READ ONLY [CONSTRAINT constraint]];
  • 8. 创建视图创建视图举例 描述视图结构 DESCRIBE empvu80CREATE VIEW empvu80 AS SELECT employee_id, last_name, salary FROM employees WHERE department_id = 80; View created.
  • 9. 创建视图创建视图时在子查询中给列定义别名 在选择视图中的列时应使用别名CREATE VIEW salvu50 AS SELECT employee_id ID_NUMBER, last_name NAME, salary*12 ANN_SALARY FROM employees WHERE department_id = 50; View created.
  • 10. 查询视图SELECT * FROM salvu50;
  • 11. 查询视图 USER_VIEWS EMPVU80 SELECT employee_id, last_name, salary FROM employees WHERE department_id=80; SQL*Plus SELECT * FROM empvu80;EMPLOYEESOracle Server
  • 12. 修改视图使用CREATE OR REPLACE VIEW 子句修改视图 CREATE VIEW 子句中各列的别名应和子查询中各列相对应CREATE OR REPLACE VIEW empvu80 (id_number, name, sal, department_id) AS SELECT employee_id, first_name || ' ' || last_name, salary, department_id FROM employees WHERE department_id = 80; View created.
  • 13. 创建复杂视图复杂视图举例CREATE VIEW dept_sum_vu (name, minsal, maxsal, avgsal) AS SELECT d.department_name, MIN(e.salary), MAX(e.salary),AVG(e.salary) FROM employees e, departments d WHERE e.department_id = d.department_id GROUP BY d.department_name; View created.
  • 14. 视图中使用DML的规定可以在简单视图中执行 DML 操作 当视图定义中包含以下元素之一时不能使用delete: 组函数 GROUP BY 子句 DISTINCT 关键字 ROWNUM 伪列
  • 15. 视图中使用DML的规定当视图定义中包含以下元素之一时不能使用update : 组函数 GROUP BY子句 DISTINCT 关键字 ROWNUM 伪列 列的定义为表达式
  • 16. 视图中使用DML的规定当视图定义中包含以下元素之一时不能使用insert : 组函数 GROUP BY 子句 DISTINCT 关键字 ROWNUM 伪列 列的定义为表达式 表中非空的列在视图定义中未包括
  • 17. 使用 WITH CHECK OPTION 子句确保DML只能在特定的范围内执行 任何违反WITH CHECK OPTION 约束的请求都会失败CREATE OR REPLACE VIEW empvu20 AS SELECT * FROM employees WHERE department_id = 20 WITH CHECK OPTION CONSTRAINT empvu20_ck ; View created.WITH CHECK OPTION 子句
  • 18. 屏蔽 DML 操作可以使用 WITH READ ONLY 选项屏蔽对视图的DML 操作 任何 DML 操作都会返回一个Oracle server 错误
  • 19. 屏蔽 DML 操作CREATE OR REPLACE VIEW empvu10 (employee_number, employee_name, job_title) AS SELECT employee_id, last_name, job_id FROM employees WHERE department_id = 10 WITH READ ONLY; View created.
  • 20. 删除视图删除视图只是删除视图的定义,并不会删除基表的数据DROP VIEW empvu80; View dropped.DROP VIEW view;
  • 21. 临时视图临时视图可以是嵌套在 SQL语句中的子查询 在FROM 子句中的的子查询是临时视图 临时视图不是数据库对象
  • 22. Top-N 分析Top-N 分析查询一个列中最大或最小的 n 个值: 销售量最高的十种产品是什么? 销售量最差的十种产品是什么? 最大和最小的值的集合是 Top-N 分析所关心的
  • 23. Top-N 分析查询最大的几个值的 Top-N 分析: SELECT [column_list], ROWNUM FROM (SELECT [column_list] FROM table ORDER BY Top-N_column) WHERE ROWNUM <= N;
  • 24. Top-N 分析查询工资最高的三名员工:SELECT ROWNUM as RANK, last_name, salary FROM (SELECT last_name,salary FROM employees ORDER BY salary DESC) WHERE ROWNUM <= 3;312123
  • 25. 总结通过本章学习,您已经了解视图的优点和基本应用: 控制数据访问 简化查询 数据独立性 删除时不删除数据 子查询是临时视图的一种 Top-N 分析