Oracle视图(和Mysq一样l)
本章内容: Oracle视图介绍与创建、Oracle视图的查询与修改、Oracle的复杂视图
1. Oracle视图介绍与创建
(1)了解常见的数据库对象都有哪些

(2)了解什么是视图以及为什么要使用视图
概念:视图是一个虚拟表,视图当中的数据是来自于基表的
为什么要用视图?
<1>安全原因:限制数据的访问(如:社会保险基金表,可以使用视图只显示姓名和地址,而不显示社会的保险号和工资)
<2>视图可使复杂的查询用于理解和使用
(3)理解视图的分类
简单视图、复杂视图、连接视图、只读视图
简单视图:基于单个表建立、不包括函数表达式以及分组数据
复杂视图:包括函数表达式以及分组数据的一个视图,目的:为了简化查询操作
连接视图:为了简化连接查询
只读视图:只允许使用select语句,只能看
(4)掌握视图的创建
先登录system用户授予创建视图权限给scott用户

创建简单视图
create view emp_view as select empno,ename,sal from emp;
select * from emp_view

创建连接视图
create view demp_view as select d.deptno,d.dname,e.empno,e.ename,e.job
from dept d inner join emp e on e.deptno=d.deptno and d.deptno=10;
接下来查询视图即可,不需要编写多表连接查询语句,很方便
select * from demp_view;

创建只读视图
create view emp_view3 as select empno,ename,sal from emp with read only;
select * from emp_view3

因为是只读视图,试着修改一下
update emp_view3 set sal=sal+50;
报错:无法对只读视图做DML操作
2.Oracle视图的查询与修改
目标:掌握视图上的DML操作、理解视图上定义的check约束的作用、掌握视图的修改与删除
- 视图上的DML操作,对视图的DML操作会改变基表中的数据,不能通过视图改变基表结构,如加字段
create view empnew_view as select empno,ename,sal from empnew;
select * from empnew_view; //查询视图
insert into empnew_view(eid,ename,salary) values(99,'qi1qi',66) update emp set ename="qiqi1" where eid=88
delete from emp where eid=88
(2)创建视图时定义check约束
create view empnew_view2 as select * from empnew where deptno=20
with check option constraint ck_view;
这时候往视图中添加数据
insert into empnew_view2(empno,ename,sal) values(22,'qiqi',333);
会报错:ORA-01402: view WITH CHECK OPTION where-clause violation //视图WITH CHECK OPTION where句子违规
这时候添加或者修改数据的时候应该满足创建视图中的约束条件才能添加
在这里指定部门编号为20即可以添加
insert into empnew_view2(empno,ename,sal,deptno) values(22,'qiqi',333,20) ;

- 掌握视图的修改与删除
修改视图:通过下面修改再查询,很明显之前的视图已经被修改
create or replace view empnew_view as select * from emp where job='SALESMAN';
select * from empnew_view;

删除视图 ,只是删除视图定义,并不会删除视图对应基表中的数据
Drop view empnew_view
基表中数据任存在

3.Oracle的复杂视图
(1)了解什么是复杂视图

(2)掌握创建复杂视图的操作, //复杂查询,指定列的别名,为了防止在视图上执行DML操作,也可以在后面加上with read only
create view job_view2(job,avgsal,sumsal,manxsal,minsal)
as select job,avg(sal),sum(sal),max(sal),min(sal) from emp group by job;
select * from job_view2;

(3)了解复杂视图上执行DML操作的原则
<1>视图中包含一下元素之一不能执行delete操作
Group by 子句
分组函数 //avg,sum,max,min
distinct 关键字
Rownum伪劣
<2>视图中包含一下元素之一不能执行update操作
Group by 子句
分组函数
distinct 关键字
Rownum伪劣
使用表达式定义的列
<3>视图中包含一下元素之一不能执行insert操作
Group by 子句
分组函数
distinct 关键字
Rownum伪劣
使用表达式定义的列
视图上没有包含基本表的not null列
例如上面创建的复杂视图就不能执行delete,update,insert操作,因为有group by 和分组函数存在
Oracle视图(和Mysq一样l)的更多相关文章
- Oracle视图分类及各种操作讲解(超级好文)
目录:一.视图的定义: 二.视图的作用: 三.创建视图: 1.权限 2.语法 3.1 创建简单视图 3.2 创建连接视图 3.2.1 连接视图定义 3.2.2 创建连接视图 3.2.3 ...
- Oracle -----视图
视图简介: 视图是基于一个表或多个表或视图的逻辑表,本身不包含数据,通过它可以对表里面的数据进行查询和修改.视图基于的表称为基表.视图是存储在数据字典里的一条select语句. 通过创建视图可以提取数 ...
- Oracle视图详解
转载自:http://blog.itpub.net/29785807/viewspace-1270120/ 一. 视图的定义 视图(view),也称虚表, 不占用物理空间,这个也是相对概念,因为视图本 ...
- oracle视图总结
视图简介: 视图是基于一个表或多个表或视图的逻辑表,本身不包含数据,通过它可以对表里面的数据进行查询和修改.视图基于的表称为基表.视图是存储在数据字典里的一条select语句. 通过创建视图可以提取数 ...
- oracle视图总结(转)
视图简介: 视图是基于一个表或多个表或视图的逻辑表,本身不包含数据,通过它可以对表里面的数据进行查询和修改.视图基于的表称为基表.视图是存储在数据字典里的一条select语句. 通过创建视图可以提取数 ...
- ORACLE 视图的 with check option
ORACLE 视图的 with check option 我们来看下面的例子: create or replace view testview as select empno,ename from e ...
- ORACLE视图添加备注
ORACLE视图添加备注 版权声明:本文为博主原创文章,未经博主允许不得转载. create or replace view oes_material_series_ref as select t.p ...
- Oracle 视图 (待更新, 缓存)
参考: 视图.索引.存储过程优缺点: http://www.cnblogs.com/SanMaoSpace/p/3147059.html oracle视图总结(转):http://tianwei013 ...
- (转)oracle视图详解
Oracle视图详解 一. 视图的定义 视图(view),也称虚表, 不占用物理空间,这个也是相对概念,因为视图本身的定义语句还是要存储在数据字典里的.视图只有逻辑定义.每次使用的时候,只是重新执 ...
随机推荐
- 在GNU/Linux下制作Windows 10安装U盘
今年春节回家期间,我需要将家里的一台安装了Debian Stretch的ZaReason笔记本电脑更换为Windows 10系统,好让爸妈从老台式机上的XP系统升级到新的平台上来.回家前,小仙女已在微 ...
- 从Jensen不等式到Minkowski不等式
整理即证 参考资料: [1].琴生不等式及其加权形式的证明.Balbooa.https://blog.csdn.net/balbooa/article/details/79357839.2018.2 ...
- mybatis和hibernate中的懒加载
概念:所谓懒加载就是延时加载,延迟加载.什么时候用懒加载呢,我只能回答要用懒加载的时候就用懒加载.至于为什么要用懒加载呢,就是当我们要访问的数据量过大时,明显用缓存不太合适,因为内存容量有限 ,为了减 ...
- get_k_data 接口文档 全新的免费行情数据接口
get_k_data 接口文档 全新的免费行情数据接口 原创: Jimmy 挖地兔 2016-11-06 前言在tushareAPI里,曾经被用户喜欢和作为典范使用的API get_hist_data ...
- 用Count() > 0 来判断集合非空的问题
Linq 出现之前,我们通常使用下面的方式来判断集合是否非空,即集合包含元素: ]; ; var list = new List<string>(); ; var collection = ...
- oracle中nvarchar2查询结果显示总是少一位
问题: 有个表的字段是nvarchar2(32),但是在plsql中查询显示结果发现一直少一位. 修改方法: 在plsql里的首选项-连接里有个选项: 在oci8上强制使用oci7, 把这个勾上就ok ...
- html动画实现
1.目标动图 2.主要代码 <p><img src="http://img.baidu.com/hi/jx2/j_0043.gif"/><img sr ...
- 1064 Financial Management
http://acm.hdu.edu.cn/showproblem.php?pid=1064 思路:看懂英文就很简单,就是12个数相加求平均数就ok了. 扩展: C++ 标准输入输出流的控制符 #in ...
- Android像素密度单位解析
Android应用程序 res/drawable-hdpi drawable-xxhdpi 显示的不同 对比实验: 创建项目后,默认在相关文件目录中生成以下图标: hdpi --> 72px m ...
- 在IDEA中spring程序可以正常运行,但IDE报错Could not autowire.
这个问题只会在使用xml文件配置bean时遇到,使用自动配置和java配置没有这种错误. 遇到这个问题首先要确定配置文件已经正确的放在了resources文件夹内,resources文件夹就是clas ...