加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Oracle系列:(22)视图

发布时间:2020-12-12 15:59:50 所属栏目:百科 来源:网络整理
导读:什么是视图【View】 (1) 视图 是一种 虚表 (2)视图建立在已有表的基础上,视图赖以建立的这些表称为 基表 (3)向视图提供数据内容的语句为 SELECT 语句 ,可以将 视图 理解为 存储起来的 SELECT 语句 (4)视图向用户提供基表数据的另一种表现形式 (5)



什么是视图【View】

(1)视图是一种虚表

(2)视图建立在已有表的基础上,视图赖以建立的这些表称为基表

(3)向视图提供数据内容的语句为 SELECT 语句,可以将视图理解为存储起来的 SELECT 语句

(4)视图向用户提供基表数据的另一种表现形式

(5)视图没有存储真正的数据,真正的数据还是存储在基表中

(6)程序员虽然操作的是视图,但最终视图还会转成操作基表

(7)一个基表可以有0个或多个视图


什么情况下会用到视图

(1)如果你不想让用户看到所有数据(字段,记录),只想让用户看到某些的数据时,此时可以使用视图

(2)当你需要减化SQL查询语句的编写时,可以使用视图,但不提高查询效率


视图应用领域

(1)银行,电信,金属,证券军事等不便让用户知道所有数据的项目中


视图的作用

(1)限制数据访问

(2)简化复杂查询

(3)提供数据的相互独立

(4)同样的数据,可以有不同的显示方式


基于emp表所有列,创建视图emp_view_1,

createview视图名asselect对一张或多张基表的查询
createviewemp_view_1
as
select*fromemp;

wKioL1fUI7Hz1K2SAAAtZpJbbW0875.jpg


默认情况下,普通用户无权创建视图,得让sysdba为你分配creare view的权限


以sysdba身份,授权scott用户create view权限

grantcreateviewtoscott;


以sysdba身份,撤销scott用户create view权限

revokecreateviewfromscott;


基于emp表指定列,创建视图emp_view_2,该视图包含编号/姓名/工资/年薪/年收入(查询中使用列别名)

createviewemp_view_2
as
selectempno"编号",ename"姓名",sal"工资",sal*12"年薪",sal*12+NVL(comm,0)"年收入"
fromemp;


基于emp表指定列,创建视图emp_view_3(a,b,c,d,e),包含编号/姓名/工资/年薪/年收入(视图中使用列名)

createviewemp_view_3(a,e)
as
selectempno"编号",0)"年收入"
fromemp;

wKioL1fUJQWiXG0RAAC_GbCz2rU667.jpg


查询emp_view_3创建视图的结构

descemp_view_3;

wKiom1fUJWCjry7DAAA1PTHP4Nw609.jpg


修改emp_view_3(id,name,salary,annual,income)视图,

createorreplaceview视图名as子查询
createorreplaceviewemp_view_3(id,income)
as
selectempno"编号",0)"年收入"
fromemp;

wKiom1fUJemDVuHIAAB0bLNjAR8357.jpg


查询emp表,求出各部门的最低工资,最高工资,平均工资

selectmin(sal),max(sal),round(avg(sal),0),deptno
fromemp
groupbydeptno;


创建视图emp_view_4,视图中包含各部门的最低工资,最高工资,平均工资

createorreplaceviewemp_view_4
as
selectdeptno"部门号",min(sal)"最低工资",max(sal)"最高工资",0)"平均工资"
fromemp
groupbydeptno;

wKiom1fUJ1nj0UZNAACw7iz_L5U624.jpg


创建视图emp_view_5,视图中包含员工编号,姓名,工资,部门名,工资等级

createorreplaceviewemp_view_5
as
selecte.empno"编号",e.ename"姓名",e.sal"工资",d.dname"部门名",s.grade"工资等级"
fromempe,deptd,salgrades
where(e.deptno=d.deptno)and(e.salbetweens.losalands.hisal);



删除视图emp_view_1中的7788号员工的记录,使用delete操作,会影响基表吗

deletefromemp_view_1whereempno=7788;

写法正确,会影响基表


修改emp_view_1为只读视图【with read only】,再执行上述delete操作,还行吗?

createorreplaceviewemp_view_1
as
select*fromemp
withreadonly;

不能进行delete操作了

wKiom1fUKKjRHdZfAABUqAp5WkQ019.jpg


将【整个】视图删除,会影响表吗?

不会影响基表


删除视图,会进入回收站吗?

不会进入回收站

wKioL1fUK0Di_FMdAAB-VAKtOrM957.jpg


删除基表会影响视图吗?

会影响视图


闪回基表后,视图有影响吗?

视图又可以正常工作了

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读