设为首页 收藏本站
查看: 832|回复: 0

[经验分享] Oracle系列:(22)视图

[复制链接]

尚未签到

发表于 2018-9-7 12:47:12 | 显示全部楼层 |阅读模式
  什么是视图【View】
  (1)视图是一种虚表
  (2)视图建立在已有表的基础上, 视图赖以建立的这些表称为基表
  (3)向视图提供数据内容的语句为 SELECT 语句,可以将视图理解为存储起来的 SELECT 语句
  (4)视图向用户提供基表数据的另一种表现形式
  (5)视图没有存储真正的数据,真正的数据还是存储在基表中
  (6)程序员虽然操作的是视图,但最终视图还会转成操作基表
  (7)一个基表可以有0个或多个视图
  什么情况下会用到视图
  (1)如果你不想让用户看到所有数据(字段,记录),只想让用户看到某些的数据时,此时可以使用视图
  (2)当你需要减化SQL查询语句的编写时,可以使用视图,但不提高查询效率
  视图应用领域
  (1)银行,电信,金属,证券军事等不便让用户知道所有数据的项目中
  视图的作用
  (1)限制数据访问
  (2)简化复杂查询
  (3)提供数据的相互独立
  (4)同样的数据,可以有不同的显示方式
  基于emp表所有列,创建视图emp_view_1,
create view 视图名 as select对一张或多张基表的查询create view emp_view_1  
as
  
select * from emp;
DSC0000.jpg

  默认情况下,普通用户无权创建视图,得让sysdba为你分配creare view的权限
  以sysdba身份,授权scott用户create view权限
grant create view to scott;  以sysdba身份,撤销scott用户create view权限
revoke create view from scott;  基于emp表指定列,创建视图emp_view_2,该视图包含编号/姓名/工资/年薪/年收入(查询中使用列别名)
create view emp_view_2  
as
  
select empno "编号",ename "姓名",sal "工资",sal*12 "年薪",sal*12+NVL(comm,0) "年收入"
  
from emp;
  基于emp表指定列,创建视图emp_view_3(a,b,c,d,e),包含编号/姓名/工资/年薪/年收入(视图中使用列名)
create view emp_view_3(a,b,c,d,e)  
as
  
select empno "编号",ename "姓名",sal "工资",sal*12 "年薪",sal*12+NVL(comm,0) "年收入"
  
from emp;
DSC0001.jpg

  查询emp_view_3创建视图的结构
desc emp_view_3;
DSC0002.jpg

  修改emp_view_3(id,name,salary,annual,income)视图,
create or replace view 视图名 as 子查询create or replace view emp_view_3(id,name,salary,annual,income)  
as
  
select empno "编号",ename "姓名",sal "工资",sal*12 "年薪",sal*12+NVL(comm,0) "年收入"
  
from emp;
DSC0003.jpg

  查询emp表,求出各部门的最低工资,最高工资,平均工资
select min(sal),max(sal),round(avg(sal),0),deptno  
from emp
  
group by deptno;
  创建视图emp_view_4,视图中包含各部门的最低工资,最高工资,平均工资
create or replace view emp_view_4  
as
  
select deptno "部门号",min(sal) "最低工资",max(sal) "最高工资",round(avg(sal),0) "平均工资"
  
from emp
  
group by deptno;
DSC0004.jpg

  创建视图emp_view_5,视图中包含员工编号,姓名,工资,部门名,工资等级
create or replace view emp_view_5  
as
  
select e.empno "编号",e.ename "姓名",e.sal "工资",d.dname "部门名",s.grade "工资等级"
  
from emp e,dept d,salgrade s
  
where (e.deptno=d.deptno) and (e.sal between s.losal and s.hisal);
  删除视图emp_view_1中的7788号员工的记录,使用delete操作,会影响基表吗
delete from emp_view_1 where empno=7788;  写法正确,会影响基表
  修改emp_view_1为只读视图【with read only】,再执行上述delete操作,还行吗?
create or replace view emp_view_1  
as
  
select * from emp
  
with read only;
  不能进行delete操作了
DSC0005.jpg

  将【整个】视图删除,会影响表吗?
  不会影响基表
  删除视图,会进入回收站吗?
  不会进入回收站
DSC0006.jpg

  删除基表会影响视图吗?
  会影响视图
  闪回基表后,视图有影响吗?
  视图又可以正常工作了



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-566109-1-1.html 上篇帖子: Oracle系列:(20)事务 下篇帖子: Oracle系列:(23)同义词
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表