视图

 

为什么使用视图

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关键字
  • 被表达式定义的列

 

上一篇:C中volatile关键字


下一篇:【DB笔试面试81】在MySQL中,如何查看创建的用户OLDLHR拥有哪些权限?