oracle学习笔记(二十二):视图


对于 scott 用户下的 emp 表:

假设:

张三 只关注 EMPNO、ENAME、JOB,张三希望用 select * from emp 语句只能查询到他所关注的字段,其他字段不要;

李四 只关注 ENAME、JOB、MGR,李四希望用 select * from emp 语句只查询到他所关注的三个字段;

王五 只关注 ENAME、SAL、COMM,同样王五也希望用 select * from emp 语句只查询到他所关注的三个字段;

对于这种问题,可以通过视图来解决。

只有视图才能解决,不同的角色,只访问他们所关注的内容。

 

什么是视图(View):

1、视图是一种虚表;

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

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

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

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

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

7、一个基表可以有 0 个或多个视图;

 

什么情况下会用到视图?

1、如果不想让用户看到所有数据(字段、记录),只想让用户看到某些数据时;

2、如果想简化 sql 查询语句的编写时,可以使用视图;但不会提高查询效率;


视图的作用:

1、限制数据访问;

2、简化复杂查询;

3、提供数据的相互独立;

4、同样的数据,可以有不同的显示方式;

 

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

语法:create view 视图名 as select 对一张或多张基表的查询;

报错 “权限不足”,查看 scott 用户的权限:

可以发现,scott 用户默认情况下只有一个权限:UNLIMITED TABLESPACE,表示可以无限使用内存空间,即无限建表;

所以,需要通过 sysdba 管理员给 scott 用户赋予 创建视图(create view)的权限:

然后再创建视图就可以成功了:

创建好视图以后,可以通过 select * from tab 语句查看当前用户下的所有对象:

2、调用视图:视图只是一个虚表,视图里存的是 sql 语句,并不是真正的数据;

把视图当做普通的表一样去查询,oracle 服务器会执行视图(emp_view_1)里的 select 语句,真正操作的还是 emp 表;

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

4、把视图 emp_view_2 看作是一个表,把视图里存储的 select 语句中的别名看作列名,可以直接查看指定的列:

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

此时视图中的列名就是指定的 a、b、c、d、e;

如果创建视图时没有指定列名,默认情况下就用 select 语句中的字段作为 列名,比如 emp_view_2;

6、修改视图 emp_view_3 的列名为 (id,name,salary,annual,income),语法:create or replace view 视图名 as 子查询;

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

8、如果上面的语句会经常用到,每次都要写,就太麻烦了,可以将上面的语句放入视图中,简化书写:

9、创建视图 emp_view_5,视图中包含 员工编号,姓名,工资,部门名,工资等级(需要用到 3 张表)

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

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

结论:对于 只读视图 只能进行 select 操作,insert、update、delete 都不可以;

12、 删除整个视图:

删除的视图不会放入回收站;

删除整个视图不会影响基表中的数据;

注意:如果删除的是基表,虽然视图还在,但是查询视图会报错;因为视图里存储的 sql 语句查不到表 会报错;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值