视图
视图是一个虚拟表
视图与表的区别:
1、表需要占用磁盘空间,视图不需要;
2、视图不需要添加索引;
3、使用视图可以简化复杂查询;
4、视图利于提高安全性;
在SQL语句之中,查询是非常麻烦的一件事情,有的查询语句非常长,在开发之中不方便进行程序的维护,那么在标准开发环境下,往往由数据库设计人员在数据库的业务中进行视图的定义以简化查询操作,所谓的视图就是包装了复杂查询的SQL语句对象
语法:
create or replace view 视图名 as 子查询 【with check option】 【with read only】;
注:or replace :创建视图,如果视图不存在则创建视图,如果存在,则使用新的查询替换之前的查询
with checkoption:不允许修改view 的创建条件
with read only:只读视图,创建的视图不允许修改 (强烈建议)
删除视图:drop view 视图名;
(帮助理解)我们根据oracle实战里面的表,来编写一个查询如下:
select product.provider,sum(purcase.quantity) sum
from product,purcase
where product.prodectid=purcase .prodectid and product.category = '牙膏'
group by product.provider
having sum(purcase.quantity) = (
select max(sum(purcase.quantity))
from product,purcase
where product.prodectid=purcase .prodectid and product.category = '牙膏'
group by product.provider)
但是我们发现这种查询太长了,维护起来很麻烦,但是我们如果创建视图的话
create or replace view_max as
select product.provider,sum(purcase.quantity) sum
from product,purcase
where product.prodectid=purcase .prodectid and product.category = '牙膏'
group by product.provider
having sum(purcase.quantity) = (
select max(sum(purcase.quantity))
from product,purcase
where product.prodectid=purcase .prodectid and product.category = '牙膏'
group by product.provider)
这样的话我们只需要根据视图名查询
select * from view_max;
就可以了
视图创建完之后,我们可以在"user_views"中查看相应的视图信息
修改视图信息:如果这个视图是一个复杂查询,或者是视图保存的不是一个真实的数据(经过函数运算,分组,distinct,等等),这种情况下是不能修改的,
但是如果视图比较单一,就可以修改
但是我们强烈建议在创建视图的时候,使用 with read only 定义只读视图。