Oracle(二)--> 视图详解(高清多图,还怕懂不了?)

来源:互联网 发布:四川旅游学院教务网络 编辑:程序博客网 时间:2024/06/06 05:23
一、什么是视图。
1、视图是一种虚表;
2、视图建立在已有表的基础上,视图来一建立的这些表称为基表
3、向视图提供数据内容的语句为 SELECT 语句,可以将视图理解为存储起来的 SELECT语句
4、视图向用户提供基表数据的另一种表现形式。

二、为什么使用视图
1、提供了另外一种级别的表的安全性(控制数据访问:不想让每个人都看到)
2、隐藏了数据的复杂性
3、简化了用户的 SQL 命令
4、隔离基表结构的改变
5、通过重命名列,从另一个角度提供数据
6、避免重复访问相同的数据

三、为视图赋予权限
更换到 system 账户(system / admin),然后在页面中输入命令:
    grand create any view to scott;
即可创建视图权限成功。

创建视图的命令(为 user_view 表添加数据):

创建成功

修改视图的数据

命令格式为 update 表名 set 列名 where ...

重新查询视图和表时,会发现两边的数据均做了更改(比较简略的表 =。=)

说明:对视图的修改会影响表,即不同权限的人不仅可以查看符合自己权限的数据,也可以进行更改,而且主表数据也会被更改。

简化查询

通过多表连接将数据添加到视图,则此视图将拥有两个表符合条件的数据,从而在每次增删改查信息的时候可以直接对视图表进行操作,而不必每次通过多表连接来实现。使得查询等变得简单,简化SQL。

修改视图
如果需要对 empview2 表的数据进行修改,可以使用命令:
create or replace view empview2。
如果仍使用 create view empview2 会报错:名称以由现有对象使用。

屏蔽 DML 操作
当用户仅有查看权限,无操作数据库权限时,可以为其添加一个命令:
with read only

来进行屏蔽 DML 操作。

四、简单视图和复杂视图

区别:有没有用到分组函数

复杂视图例:

查询得出符合条件的数据:

视图中使用 DML 的规定
1、可以在简单视图中执行 DML 操作
2、当视图定义中出现以下元素之一时不能使用 delete:
---组函数
---group by 子句
---distinct 关键字
---rownum 伪列

五、TOP - N 分析
1、根据 rownum 查询工资前八名的员工 id、工资、姓名

如果通过 rownum 进行中间值查询时,会无数据返回

原因:对 rownum 只能使用 < 或 <= , 而用 =, >, >= 都不能返回任何数据。
那该如何实现一个类似分页的功能呢?如何查找指定范围内的数据?
分析:此时伪列是不可以被使用的,但是如果将伪列变为真实存在的列然后再进行查询便可以得出想要的数据了。

将 rownum 命名为 rn ,在最外层的 sql 语句中查询 rn(防止与本层 rownum 冲突),然后再加上 rn 的条件即可查询。结果如下:

其他
显示视图的结构:







1 0