为什么使用视图
1、限制数据访问 2、使复杂查询更容易 3、提供数据独立性 4、相同的数据表示为不同的视图
创建视图的准备工作
-- 切换到最高权限 SQL> conn / as sysdba 已连接。 -- 授权创建视图 SQL> grant create view to scott; 授权成功。 -- 再回到用 scott 户下 SQL> conn scott/tiger 已连接。 -- 这下创建视图的权限就有了 SQL> select * from session_privs; PRIVILEGE ---------------------------------------- CREATE SESSION UNLIMITED TABLESPACE CREATE TABLE CREATE CLUSTER CREATE VIEW CREATE SEQUENCE CREATE PROCEDURE CREATE TRIGGER CREATE TYPE CREATE OPERATOR CREATE INDEXTYPE 已选择11行。
创建一个简单的视图
SQL> create view vu10 as 2 select empno,ename,sal,deptno from emp where deptno=10; 视图已创建。 SQL> select * from vu10; EMPNO ENAME SAL DEPTNO ---------- ---------- ---------- ---------- 7782 CLARK 2450 10 7839 KING 5000 10 7934 MILLER 1300 10
修改视图
SQL> create or replace view vu10 as select empno,ename, hiredate,sal,deptno from emp where deptno=10; 视图已创建。 SQL> select * from vu10; EMPNO ENAME HIREDATE SAL DEPTNO ---------- ---------- -------------- ---------- ---------- 7782 CLARK 09-6月 -81 2450 10 7839 KING 17-11月-81 5000 10 7934 MILLER 23-1月 -82 1300 10
修改视图标题名称
SQL> create or replace view vu10(employee_id, first_name, hire_date, salary, department_id) as select empno,ename, hiredate,sal,deptno from emp where deptno=10; 视图已创建。 SQL> select * from vu10; EMPLOYEE_ID FIRST_NAME HIRE_DATE SALARY DEPARTMENT_ID ----------- ---------- -------------- ---------- ------------- 7782 CLARK 09-6月 -81 2450 10 7839 KING 17-11月-81 5000 10 7934 MILLER 23-1月 -82 1300 10
往视图插入数据
SQL> insert into vu10 values (2,'tom', sysdate, 1200,10); 已创建 1 行。 SQL> select * from emp; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- -------------- ---------- ---------- ---------- 1 tom 700 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 X_SCOTT ANALYST 7566 19-4月 -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 23-5月 -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 2 tom 18-4月 -21 1200 10
删除视图数据
SQL> delete vu10 where first_name='MILLER'; 已删除 1 行。 SQL> select * from vu10; EMPLOYEE_ID FIRST_NAME HIRE_DATE SALARY DEPARTMENT_ID ----------- ---------- -------------- ---------- ------------- 7782 CLARK 09-6月 -81 2450 10 7839 KING 17-11月-81 5000 10 2 tom 18-4月 -21 1200 10 SQL> select * from emp; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- -------------- ---------- ---------- ---------- 1 tom 700 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 X_SCOTT ANALYST 7566 19-4月 -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 23-5月 -87 1100 20 7900 JAMES CLERK 7698 03-12月-81 950 30 7902 FORD ANALYST 7566 03-12月-81 3000 20 2 tom 18-4月 -21 1200 10 已选择15行。
视图包含下面这些,不能删除和修改数据
- 组函数
- group by 字句
- distinct 关键字
- 伪列rownum关键字
- 被表达式定义的列