1. 视图的理解
视图其实就是一条查询SQL语句,用于显示一个(或多个)表或其它视图中的相关数据。视图将一个查询的结果作为一个表来使用。因此视图可以被看做是存储在系统中的一张虚拟表。视图源于表,所有对视图数据的修改最终都会被反映到视图的基表中。
2. 视图的存储
与表不一样,视图不要求分配存储空间,视图中也不会包含实际的数据。视图只是定义了一个查询,视图中的数据都是从基表获取,这些数据在视图被引用时动态的生成。
3. 视图的作用
用户可以通过视图以不同的形式来显示基表中的数据,视图的强大之处在于它能够根据不同用户的需要来对基表中的数据进行整理。视图常见的用途如下:
3.1 通过视图可以设定允许用户访问某些列或某些行数据
为表提供了额外的安全控制
3.2 隐藏数据的复杂性
视图中通常会使用一些很复杂的SQL语句,如join等,用多个表中相关的列构成一个新的数据集,这个视图就隐藏了数据来源于多个表的现象
3.3 简化用户的SQL语句
用户使用视图就可以从中获取到多个表的信息,不需要关心这些表是如何连接的。
3.4 视图的列名可以被任意改变,而不会影响视图的基表
这可以使应用程序不受基表定义/改变的影响。例如:在一个视图的定义中查询了一个包含4列的基表中的3列数据,当基表中添加了新的列后,由于视图的定义并没有被影响,因此使用此视图的应用程序也不会被影响。
3.5 保存复杂查询
一个查询可能会对多张表进行复杂的计算,用户将这个查询保存为视图之后,以后每次进行类似计算只需要查询这个视图即可。
3.6 逻辑数据独立性
视图可以使应用程序和数据库表在一定程度上独立。如果没有视图,应用是建立在表上的,有了视图之后,程序可以建立在视图之上,从而程序与数据库表分割开来。
4. 视图的工作机制
视图的定义就是查询语句,Oracle将这个定义以文本形式存储在数据字典中。当用户在SQL语句中引用该视图时,Oracle将进行以下工作:
1>将引用了视图的语句与视图的定义语句整合成一个语句
2>在共享SQL区解析整合后的语句
3>执行整合后的语句
4>当现有的共享SQL区中没有与整合后的语句一致时,Oralce会为此语句创建新的共享SQL区。因此,引用了视图的SQL语句也能够利用已有的共享SQL区以达到节约内存和提高性能的目的。
5. 视图的依赖性
由于视图的定义是一个引用了其它对象(表,视图)的查询,因此视图依赖于其所引用的对象。
6. 视图的创建
create or replace view demo_view(name,age) as
select tu.user_name,tu.age
from t_user tu;
备注:括号里面的name,age是select得到的结果的别名
7. 视图的调用及结果