SQL基础之创建其他方案对象十(五)

 视图概述:

– 从视图中创建、修改和检索数据

– 在视图上的数据操纵语言(DML)操作

– 删除视图


Object 对象Description 描述Table 表基本的数据存储集合,由行和列组成。View 视图从一张表或多张表中抽出的逻辑上相关的数据集合Sequence 序列生成规律的数值Index 索引提高查询性能Synonym 同义词给对象起的别名


什么是视图?我的理解就是从一张表或多张表创建一个自定义的关联虚拟表

SQL 基础之创建其他方案对象(十五)


  •  限制数据访问

  •  简化查询

  •  数据独立性

  •  避免重复访问相同的数据


特点简单视图复杂视图表的数量OneOne or more 包含函数NoYes包含分组数据NoYes通过视图做 DML 操作YesNot alway

 CREATE VIEW 子句中嵌入子查询: 

create [or replace] [force|noforce] view myview

[(alias[, alias]...)]

as subquery

[with check option [constraint constraint]]

[with read>

  • 子查询可以包含复杂的 SELECT 语法

  • With check option: 防止插入不可见的行,防止从视图中丢失的更新。


  • 1、创建视图emp80,包含部门为80的员工详细信息:

    create view  emp80

    as select employee_id, last_name, salary

    from employees

    where department_id=80;


    使用 SQL*Plus 的 DESCRIBE 命令描述视图结构

    desc emp80


    2、在子查询中使用列别名创建视图:

    create view  salv50

    as select employee_id id_number, last_name name,

    salary*12 ann_salary

    from employees

    where department_id=50;



    使用CREATE OR REPLACE VIEW 子句修改EMPVU80视图。为每一列都增加别名:

     create or replace view emp80

    (id_number, name, sal, department_id)

    as select employee_id, first_name || ' '

    || last_name, salary, department_id

    from employees

    where department_id=80;



    创建一个包含组函数,从两张表中显示数据的复杂视图:

    create or replace view dept_sum_vu

    (name, minsal, maxsal, avgsal)

    as select d.department_name, min(e.salary),

    max(e.salary),avg(e.salary)

    from employees e join departments d

    on (e.department_id=d.department_id)

    group by d.department_name;


    可以在简单视图上执行DML操作

    当视图定义中包含以下元素之一时不能删除行

    – 组函数

    – GROUP BY 子句

    – DISTINCT 关键字

    – ROWNUM 伪列


    当视图定义中包含以下元素之一时不能修改数据:

    – 组函数

    – GROUP BY 子句

    – DISTINCT 关键字

    – ROWNUM 伪列

    – 表达式定义的列


     当视图定义中包含以下元素之一时不能插入数据:

    – 组函数

    – GROUP BY 子句

    – DISTINCT 关键字

    – ROWNUM 伪列

    – 表达式定义的列

    – 表中非空的列在视图定义中未包括



    使用 WITH CHECK OPTION 子句确保DML只能在特定的范围内执行:

    create or replace view empvu20

    as select *

    from employees

    where department_id=20

    with check option constraint empvu20_ck ; 


    • 可以使用 WITH READ>

    •  自动提供唯一的数值

    •  共享对象

    •  主要用于提供主键值

    •  可代替应用程序生成序号

    •  将序列值缓存到内存中,可以提高访问效率


    CREATE SEQUENCE  语法

     定义一个序列自动生成连续的数字:

     create sequence sequence

    [increment by n]

    [start with n]

    [{maxvalue n | nomaxvalue}]

    [{minvalue n | nominvalue}]

    [{cycle | nocycle}]

    [{cache n | nocache}];


    •  创建序列 DEPT_DEPTID_SEQ 为表 DEPARTMENTS 提供主键。

    •  不是用 CYCLE 选项

    create sequence dept_deptid_seq

    increment by 10

    start with 120

    maxvalue 9999

    nocache

    nocycle;