18-Oracle入门之视图
2017-01-08 15:46
369 查看
视图是从表中抽出的逻辑上相关的数据集合。
视图建立在已有表的基础上, 视图赖以建立的这些表称为基表。
向视图提供数据内容的语句为 SELECT 语句, 可以将视图理解为存储起来的 SELECT 语句.
视图向用户提供基表数据的另一种表现形式
视图的优点 简化查询
简化复杂查询 (封装 复杂sql语言)
限制数据访问 银行系统视图呈现,而且只读视图, 通过存储过程和存储函数来做
通过视图修改表中的数据,不建议,有很多限制
提供数据的相互独立
同样的数据,可以有不同的显示方式
但视图不能提高性能
注意:不建议通过视图对表进行修改
使用下面的语法格式创建视图
FORCE: 子查询不一定存在
NOFORCE: 子查询存在(默认)
WITH READ ONLY:只能做查询操作
子查询可以是复杂的 SELECT 语句
应用:
用户管理中/权限管理 需要管理员登录进行授权
描述视图结构
创建视图时在子查询中给列定义别名
在选择视图中的列时应使用别名
CREATE VIEW 子句中各列的别名应和子查询中各列相对应
当视图定义中包含以下元素之一时不能使用delete:
组函数
GROUP BY 子句
DISTINCT 关键字
ROWNUM 伪列
当视图定义中包含以下元素之一时不能使用update :
*组函数
GROUP BY子句
DISTINCT 关键字
ROWNUM 伪列
列的定义为表达式
当视图定义中包含以下元素之一时不能使用insert :
组函数
GROUP BY 子句
DISTINCT 关键字
ROWNUM 伪列
列的定义为表达式
表中非空的列在视图定义中未包括
屏蔽 DML 操作
可以使用 WITH READ ONLY 选项屏蔽对视图的DML 操作
任何 DML 操作都会返回一个Oracle server 错误
的数据.
基本套路是:
通过视图只能看到10号部门的员工信息,不能插入20号部门员工
视图with read only
修改视图 视图只能替换,不能修改
结论:一般不通过视图做insert/update/delete操作,视图的目的:就是简化查询!
基本概念
视图是一种虚表.视图建立在已有表的基础上, 视图赖以建立的这些表称为基表。
向视图提供数据内容的语句为 SELECT 语句, 可以将视图理解为存储起来的 SELECT 语句.
视图向用户提供基表数据的另一种表现形式
视图的优点
视图的优点 简化查询
简化复杂查询 (封装 复杂sql语言)
限制数据访问 银行系统视图呈现,而且只读视图, 通过存储过程和存储函数来做
通过视图修改表中的数据,不建议,有很多限制
提供数据的相互独立
同样的数据,可以有不同的显示方式
但视图不能提高性能
简单视图和复杂视图
注意:不建议通过视图对表进行修改
创建视图
是一个逻辑概念,本身没有数据,还是来源于表使用下面的语法格式创建视图
FORCE: 子查询不一定存在
NOFORCE: 子查询存在(默认)
WITH READ ONLY:只能做查询操作
CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view [(alias[, alias]...)] AS subquery [WITH CHECK OPTION [CONSTRAINT constraint]] [WITH READ ONLY [CONSTRAINT constraint]];
子查询可以是复杂的 SELECT 语句
应用:
CREATE VIEW empvu80 AS SELECT employee_id, last_name, salary FROM employees WHERE department_id = 80; View created.
create view empincomeview as select e.empno, e.ename, e.sal, e.sal*12 annalsal, sal*12+nvl(comm, 0) income, d.dname from emp e, dept d where e.deptno = d.deptno;
用户管理中/权限管理 需要管理员登录进行授权
sqlplus /as sysdba SQL> grant create view to scott; --创建视图的权限给scott用户
描述视图结构
DESCRIBE empvu80
创建视图时在子查询中给列定义别名
CREATE VIEW salvu50 AS SELECT employee_id ID_NUMBER, last_name NAME, salary*12 ANN_SALARY FROM employees WHERE department_id = 50; View created.
在选择视图中的列时应使用别名
查询视图
SELECT * FROM salvu50;
修改视图
使用CREATE OR REPLACE 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.
CREATE VIEW 子句中各列的别名应和子查询中各列相对应
创建复杂视图
复杂视图举例:查询各个部门的最低工资,最高工资,平均工资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.
视图中使用DML的规定
可以在简单视图中执行 DML 操作当视图定义中包含以下元素之一时不能使用delete:
组函数
GROUP BY 子句
DISTINCT 关键字
ROWNUM 伪列
当视图定义中包含以下元素之一时不能使用update :
*组函数
GROUP BY子句
DISTINCT 关键字
ROWNUM 伪列
列的定义为表达式
当视图定义中包含以下元素之一时不能使用insert :
组函数
GROUP BY 子句
DISTINCT 关键字
ROWNUM 伪列
列的定义为表达式
表中非空的列在视图定义中未包括
屏蔽 DML 操作
可以使用 WITH READ ONLY 选项屏蔽对视图的DML 操作
任何 DML 操作都会返回一个Oracle server 错误
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.
删除视图
删除视图只是删除视图的定义,并不会删除基表的数据.
基本套路是:
DROP VIEW view;
DROP VIEW empvu80; View dropped.
视图注意点
视图 with check optioncreate view view1 as select * from emp where deptno=10 with check option; insert into view1 values(***,***,...., 10); insert into view1 values(***,***,...., 20);
通过视图只能看到10号部门的员工信息,不能插入20号部门员工
视图with read only
create or replace view empincomeview2 as select e.empno, e.ename, e.sal, e.sal*12 annalsal, sal*12+nvl(comm, 0) income, d.dname from emp e, dept d where e.deptno = d.deptno with read only;
修改视图 视图只能替换,不能修改
结论:一般不通过视图做insert/update/delete操作,视图的目的:就是简化查询!
相关文章推荐
- oracleI基础入门(7)--table--视图
- [原]java专业程序代写(qq:928900200),学习笔记之基础入门<Oracle_函数_触发器_游标_存储过程_视图>(三十五)
- Oracle入门必会(18)
- Oracle——18用户、角色和权限信息的视图总结
- ORACLE物化视图入门
- Oracle(18)pl/sql编程 概念、快速入门及编程规范
- java 从零开始,学习笔记之基础入门<Oracle_函数_触发器_游标_存储过程_视图>(三十五)
- 数据库 day60,61 Oracle入门,单行函数,多表查询,子查询,事物处理,约束,rownum分页,视图,序列,索引
- 数据库(oracle)数据同步之物化视图(实战入门)
- oracle mv物化视图入门
- oracle 入门笔记--v$sql和v$sqlarea视图(转载)
- Oracle入门第五天(上)——数据库对象之视图
- Oracle 的入门心得
- Spring入门18 - DispatcherServlet定义档
- Oracle RMAN快速入门指南
- oracle入门知识
- Oracle的入门心得
- Oracle PL/SQL入门之慨述
- Oracle入门
- Oracle PL/SQL入门之案例实践(转)