1、 视图
视图是从一个表或多个表中导出的虚表,它与常规表不同之处在于它并不存储数据—它只是在一个存储的查询中定义.视图同真实表一样,也包含一系列带有名称的列和数据。
视图建立在已有表的基础上, 视图赖以建立的这些表称为基表。
向视图提供数据内容的语句为 SELECT 语句, 可以将视图理解为存储起来的 SELECT 语句.
视图向用户提供基表数据的另一种表现形式
视图分为简单视图还有复杂视图
所谓简单的视图是只引用一个表,并且它只从基础表中检索数据,不允许修改其中的数据;
复杂的视图是引用多个表,视图越复杂、视图内再查询的表达式就越多越复杂.
创建视图的语法:
CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view
[(alias[, alias]...)]
AS subquery
[WITH CHECK OPTION [CONSTRAINT constraint]]
[WITH READ ONLY [CONSTRAINT constraint]];
注意:在创建视图时应先赋予创建视图的权限,create view或create any view权限
//切换到管理员然后赋予权限
SQL> grant create any view to redarmy;
SQL> grant create view to redarmy;
//创建简单视图
Create view empsal as select * from emp where sal>=300;
Select * from empsal;
//创建复杂视图
Select deptno,avg(sal) from emp group by deptno;
Creat view groupview as Select deptno,avg(sal) as avgsal from emp group by deptno;
Select dname,e.* from(Select deptno,avg(sal) from emp group by deptno) e inner join dept d on d.deptno=e.deptno;
//覆盖视图
Create or replace view groupview as Select dname,e.* from(Select deptno,avg(sal) from emp group by deptno) e inner join dept d on d.deptno=e.deptno ;
创建视图给定别名
Create or replace view empSal (ename,esal) as select ename,sal from emp where sal>300
//屏蔽操作
Create or replace view empSal (ename,esal) as select ename,sal from emp where sal>300
With read only;
//删除视图
Drop view empsal
为什么使用视图?
控制数据访问:提供了一种安全机制,通过视图显示数据时,屏蔽用户不应该知道的数据.
简化查询:select语句构造了一个复杂的查询语句,每次使用必须都得调用它,根据复杂查询的语句创建一个试图,来简化查询。
创建视图时在子查询中给列定义别名