
视图
什么是视图?
(在 SQL 中,视图是基于 SQL 语句的结果集的可视化的表。
视图包含行和列,就像一个真实的表。视图中的字段就是来自一个或多个数据库中的真实的表中的字段。我们可以向视图添加 SQL 函数、WHERE 以及 JOIN 语句,我们也可以提交数据,就像这些来自于某个单一的表。
注释:数据库的设计和结构不会受到视图中的函数、where 或 join 语句的影响。
注释:视图总是显示最近的数据。每当用户查询视图时,数据库引擎通过使用 SQL 语句来重建数据。 ——括号内容来源于百度网络)
============================================================================================================================================
登录到sys账户给Scott赋予创建视图的权限
grant createview to scott;
视图的创建
create view v_emp_dept
as
select ename ,sal,job,dname,from emp,dept where emp.deptno = dept.deptno ;
视图也可以从视图产生
create view v_emp_dept_tem
as
select ename,sal from v_emp_dept
修改视图的数据,就是修改基表的数据
create or replace view v_emp
as
select empno,ename from emp
with read only
视图的优点:1可以使某些重复出现的SQL语句变得更为简单
视图的缺点:1如果修改基表的结构,视图失效
2增加数据库的维护成本
3视图会被覆盖掉
一般情况下,不要对视图进行DML操作(DML请参考‘2019年4月25日Oarcle之用户管理 与 DCL’)
视图的例子
select dname, grade
from (select deptno, avg_sal, grade
from (select deptno, avg(sal) avg_sal from emp group by deptno) t,
salgrade s
where t.avg_sal between s.losal and s.hisal) t1,
dept
where t1.deptno = dept.deptno
and t1.grade =
(select min(grade)
from (select deptno, avg_sal, grade
from (select deptno, avg(sal) avg_sal
from emp
group by deptno) t,
salgrade s
where t.avg_sal between s.losal and s.hisal));
为上面的SQL中重复出现的SQL语句创建视图
create view v_dept_avgsal
as
select deptno,avg_sal,grade
from (select deptno, avg(sal) avg_sal from emp group by deptno) t,
salgrade s
where t.avg_sal between s.losal and s.hisal
利用视图替换上面的sql语句
select dname, grade
from v$_dept_avgsal t1,
dept
where t1.deptno = dept.deptno
and t1.grade =
(select min(grade)
from v$_dept_avgsal);
删除视图所表示的基表
create view v$_aaa
as
select * from aaa;
删除表 aaa
drop table aaa;
查询视图
select * from v$_aaa;
删除视图 :v$_aaa
drop view v$_aaa;