视图,可视化的表。
视图与表的区别
1)视图不保存实际数据,只保存生成视图的语句;
2)当访问视图时,生成视图的语句会被运行,从基表获得数据生成视图数据;
3)对基表的修改会影响视图数据;
4)对视图的修改也会反映在基表上。
视图是动态的,表是静态的。
视图的作用
1)简化sql书写
2)隐蔽数据细节
3)实现行列级别的安全控制
4)解决TOP n 问题
例1-TOP n问题的解决
利用视图作为中间过渡
SQL> create view vtep as select * from emp order by sal desc;
视图已创建。
SQL> select * from vtep where rownum<3;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- -------------------- ------------------ ---------- -------------- ---------- ---------- ----------
7839 KING PRESIDENT 17-11月-81 5000 10
7788 SCOTT ANALYST 7566 24-1月 -87 3000 20
例2-利用视图实现行列级的访问控制
如果用户有用视图的访问权,即使没有基表的访问权也可以访问视图。
实现了行列级的访问控制。
SQL> alter session set "_ORACLE_SCRIPT"=true;
会话已更改。
SQL> create user x2 identified by abc;
用户已创建。
SQL> grant connect to x2;
授权成功。
SQL> conn x2/abc;
已连接。
SQL> select * from emp;
select * from emp
*
第 1 行出现错误:
ORA-00942: 表或视图不存在
SQL> select * from c#scott.emp;
select * from c#scott.emp
*
第 1 行出现错误:
ORA-00942: 表或视图不存在
SQL>conn c##scott/tiger
SQL> grant select on emp to x2;
授权成功。
SQL> conn x2/abc
已连接。
SQL> select * from c##scott.emp;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- -------------------- ------------------ ---------- -------------- ---------- ---------- ----------
7369 SMITH CLERK 7902 17-12月-80 800 20
7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30
7521 WARD SALESMAN 7698 22-2月 -81 1250 500 30
7566 JONES MANAGER 7839 02-4月 -81 2975 20
7654 MARTIN SALESMAN 7698 28-9月 -81 1250 1400 30
7698 BLAKE MANAGER 7839 01-5月 -81 2850 30
7782 CLARK MANAGER 7839 09-6月 -81 2450 10
7788 SCOTT ANALYST 7566 24-1月 -87 3000 20
7839 KING PRESIDENT 17-11月-81 5000 10
7844 TURNER SALESMAN 7698 08-9月 -81 1500 0 30
7876 ADAMS CLERK 7788 02-4月 -87 1100 20
7900 JAMES CLERK 7698 03-12月-81 950 30
7902 FORD ANALYST 7566 03-12月-81 3000 20
7934 MILLER CLERK 7782 23-1月 -82 1300 10
已选择 14 行。
SQL> conn c##scott/tiger
已连接。
SQL> revoke select on emp from x2;
撤销成功。
SQL> conn x2/abc
已连接。
SQL> select * from c##scott.emp;
select * from c##scott.emp
*
第 1 行出现错误:
ORA-00942: 表或视图不存在
SQL> select * from c##scott.vtep;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- -------------------- ------------------ ---------- -------------- ---------- ---------- ----------
7839 KING PRESIDENT 17-11月-81 5000 10
7902 FORD ANALYST 7566 03-12月-81 3000 20
7788 SCOTT ANALYST 7566 24-1月 -87 3000 20
7566 JONES MANAGER 7839 02-4月 -81 2975 20
7698 BLAKE MANAGER 7839 01-5月 -81 2850 30
7782 CLARK MANAGER 7839 09-6月 -81 2450 10
7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30
7844 TURNER SALESMAN 7698 08-9月 -81 1500 0 30
7934 MILLER CLERK 7782 23-1月 -82 1300 10
7521 WARD SALESMAN 7698 22-2月 -81 1250 500 30
7654 MARTIN SALESMAN 7698 28-9月 -81 1250 1400 30
7876 ADAMS CLERK 7788 02-4月 -87 1100 20
7900 JAMES CLERK 7698 03-12月-81 950 30
7369 SMITH CLERK 7902 17-12月-80 800 20
已选择 14 行。
视图的创建与删除
·视图的创建
create view
例
create view e10 as select * from emp where deptno=10;
·衍生列
衍生列,利用已有的列通过一系列运算而生成的新列。
无法修改。
·视图的删除
drop view
例
SQL> drop view vtep;
视图已删除。