视图概述:
– 从视图中创建、修改和检索数据
– 在视图上的数据操纵语言(DML)操作
– 删除视图
什么是视图?我的理解就是从一张表或多张表创建一个自定义的关联虚拟表
限制数据访问
简化查询
数据独立性
避免重复访问相同的数据
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;
NEXTVAL 返回下一个可用的序列值。它返回一个唯一的值每次引用它的时候,任何用户都可以引用它
CURRVAL得到当前的序列值
SQL基础之创建其他方案对象十(五)