Oracle 视图
来源:互联网 发布:2016年最火的网络用语 编辑:程序博客网 时间:2024/04/28 15:20
Oracle 视图
视图: 你可以通过创建表的视图来表现数据的逻辑子集或数据的组合.视图是基于表或者另一个
视图的逻辑表,一个视图并不包含它自己的数据,它象一个窗口,通过该窗口可以查看或改变
表中的数据.视图基于其上的表称为基表.视图在数据字典中作为一个select语句存储.
优点:
1.限制数据的访问,因为视图能够选择性的显示表中的列.
视图可以用来构成简单的查询以取出复杂查询的结果.例如,视图能用于从多表中
查询信息,而用户不必知道怎样写连接语句.
2.视图可以用来构成简单的查询以取回复杂查询的结果.例如,视图能用于多表查询信息.
而用户不必知道怎样写连接语句.
3.视图对特别的用户和应用程序提供数据独立性,一个视图可以从几个表中取回数据.
4.视图提供用户组按照他们的特殊标准访问数据.
复杂视图VS简单视图
简单视图:
数据仅来自一个表,
不包含函数或数据分组
能通过视图执行DML操作
复杂视图:
数据来自多个表
包含函数或数据分组
不总是允许通过视图进行DML操作(若非要进行操作,可使用替代触发器实现)
视图的逻辑表,一个视图并不包含它自己的数据,它象一个窗口,通过该窗口可以查看或改变
表中的数据.视图基于其上的表称为基表.视图在数据字典中作为一个select语句存储.
优点:
1.限制数据的访问,因为视图能够选择性的显示表中的列.
视图可以用来构成简单的查询以取出复杂查询的结果.例如,视图能用于从多表中
查询信息,而用户不必知道怎样写连接语句.
2.视图可以用来构成简单的查询以取回复杂查询的结果.例如,视图能用于多表查询信息.
而用户不必知道怎样写连接语句.
3.视图对特别的用户和应用程序提供数据独立性,一个视图可以从几个表中取回数据.
4.视图提供用户组按照他们的特殊标准访问数据.
复杂视图VS简单视图
简单视图:
数据仅来自一个表,
不包含函数或数据分组
能通过视图执行DML操作
复杂视图:
数据来自多个表
包含函数或数据分组
不总是允许通过视图进行DML操作(若非要进行操作,可使用替代触发器实现)
创建视图:
create [or replace] [force|noforce] View view_name alias as subquery
子查询可以包含复杂的select语法
create [or replace] [force|noforce] View view_name alias as subquery
子查询可以包含复杂的select语法
or replace 如果视图已经存在重新创建它
force 创建视图,而不管基表是否存在
noforce 只在基表存在的情况下创建视图(默认)
alias 为由视图查询选择的表达式指定名字
with check option 指定只有可访问的行在视图中才能被插入或修改
constraint 为check option 约束指定名字
with read only 确保在该视图中没有DML操作被执行
force 创建视图,而不管基表是否存在
noforce 只在基表存在的情况下创建视图(默认)
alias 为由视图查询选择的表达式指定名字
with check option 指定只有可访问的行在视图中才能被插入或修改
constraint 为check option 约束指定名字
with read only 确保在该视图中没有DML操作被执行
创建视图:
create view v1 as select id from Test3 ;
定义一个视图的子查询可以包含复杂的select语法,包括连分组和多个字
查询.
定义视图的子查询不能包含order by子句,当你从视图取回数据时可以指
定order by子句.
create view v1 as select id from Test3 ;
定义一个视图的子查询可以包含复杂的select语法,包括连分组和多个字
查询.
定义视图的子查询不能包含order by子句,当你从视图取回数据时可以指
定order by子句.
如果你没有为with check option选项创建的视图指定一个约束,系统将以
SYS_Cn格式指定一个默认的名字.
可以用or replace选项改变视图的定义而无须删除和重建它,或重新授予以
前已经授予它的对象权限.
SYS_Cn格式指定一个默认的名字.
可以用or replace选项改变视图的定义而无须删除和重建它,或重新授予以
前已经授予它的对象权限.
修改视图:
create or replace view v1 as select id from Test5;
用 or replace 选项,允许创建视图时同名存在,这样旧版本的的视图会被替换
创建复杂视图:
create view v2 as select a.id,b.content from Test3 a,Test2 b group by a.id;
视图中DML操作的执行规则
1.只能在简单视图上执行DML操作
2.如果视图中包含下面的部分就不能删除行(视图为只读)
组函数,group by子句,distinct 关键字,伪列rownum关键字(补充:AVG、SUM等聚合函数)
视图中DML操作的执行规则
1.组函数
2.group by 子句
3.distinct关键字
4.伪列rownum关键字
5.用表达式定义的列
6.基表中not null列不在视图中
1.只能在简单视图上执行DML操作
2.如果视图中包含下面的部分就不能删除行(视图为只读)
组函数,group by子句,distinct 关键字,伪列rownum关键字(补充:AVG、SUM等聚合函数)
视图中DML操作的执行规则
1.组函数
2.group by 子句
3.distinct关键字
4.伪列rownum关键字
5.用表达式定义的列
6.基表中not null列不在视图中
with check option 子句
你可以确保DML操作在视图上被执行,用with check option 子句检查视图的域
你可以确保DML操作在视图上被执行,用with check option 子句检查视图的域
create or replace view TV3 as select * from Test5
where id =1 with check option constraint TV3_PK;
update TV3 set id = 2 where id = 1;
执行错误;
insert into TV3(id) values(3);
执行错误;
where id =1 with check option constraint TV3_PK;
update TV3 set id = 2 where id = 1;
执行错误;
insert into TV3(id) values(3);
执行错误;
在TV3中已经指定了check option 为id =1,只能看到id为1的行,只能操作这一行,
update TV3 set content='22' where id = 1;
update TV3 set content='22' where id = 1;
视图可以设置为只读属性:with read only
create or place view TV3 as select id from Test2 with read only;
内建视图:
内建视图是一个带有别名的可以在SQL语句中使用的子查询
在一个主查询的from子句中指定的子查询就是一个内建视图
例: select a.last_name,a.salary,a.department,b.maxsal
from employees a,(select department_id,max(salary) maxsal
from employees
group by department_id) b
where a.department_id = b.department_id
and a.salary < b.maxsal
内建视图是一个带有别名的可以在SQL语句中使用的子查询
在一个主查询的from子句中指定的子查询就是一个内建视图
例: select a.last_name,a.salary,a.department,b.maxsal
from employees a,(select department_id,max(salary) maxsal
from employees
group by department_id) b
where a.department_id = b.department_id
and a.salary < b.maxsal
Top-N分析 (oracle 中 不支持TOP N语句,所以需要用内建视图来完成.)
Top-N查询寻找一列的n个最大值或最小值,例如:
销售最好的前10位产品是什么?
销售最差的前10位产品是什么?
最大值和最小值在Top-N查询中设置
Top-N查询寻找一列的n个最大值或最小值,例如:
销售最好的前10位产品是什么?
销售最差的前10位产品是什么?
最大值和最小值在Top-N查询中设置
select column_name,rownum
from (select column
from table
order by Top-N_column)
where rownum <= N;
from (select column
from table
order by Top-N_column)
where rownum <= N;
1.子循环或者内建视图产生数据的排序列表,该子查询或者内建视图
包含order by 子句来确保排序
2.在最后的结果集中用外循环限制行数.外循环包括下面的组成部分:
rownum伪列,它从子查询返回每一行指定一个从1开始的连续的值
where子句,它指定被返回的n行.
包含order by 子句来确保排序
2.在最后的结果集中用外循环限制行数.外循环包括下面的组成部分:
rownum伪列,它从子查询返回每一行指定一个从1开始的连续的值
where子句,它指定被返回的n行.
例如: select rownum as rank,E.last_name,E.salary
from (select last_name,salary from employees
order by salary desc) E
where rownum <=3
有关视图的一些数据字典的查看:
DESC DBA_VIEWS 管理员用户
DESC ALL_VIEWS 所有用户
DESC USER_VIEWS 当前用户
如查看某个视图的语法信息:
select text from user_views where user_name='视图名'
- oracle视图
- oracle视图
- Oracle视图
- Oracle视图
- Oracle视图
- Oracle视图
- oracle视图
- Oracle 视图
- oracle 视图
- oracle视图
- oracle视图
- oracle 视图
- oracle 视图
- Oracle视图
- Oracle视图
- oracle 视图
- oracle视图
- oracle 视图
- VC++动态链接库编程之非MFC DLL
- 关于禁用发布可能出现的问题处理
- 勾起的记忆
- 我又一个愿望
- maven 生命周期
- Oracle 视图
- C/S 与 B/S 的区别
- 在星际译王中添加词典,zip合并解压的方法
- spring 剑走偏锋 mappingDirectoryLocations来配置Hibernate映射文件
- Ext_表单提交
- 网络超级语录
- 微软Visual C++项目组征求开发人员意见以规划下一个版本(继Visual C++2010之后的强悍版本Visual C++2012)
- VC++动态链接库编程之DLL典型实例
- 从今天开始~!!