视图:VIEW
1、视图简介
1)视图是一张虚拟的表,不存储具体的数据
2)视图建立在已有的表的基础上,那这个表称为“基表”
3)不存储具体的数据,数据来源都是SELECT语句,所以理解为视图存储的是SQL语句
作用:
1)简化查询语句
2)权限控制
3)避免重复访问相同的数据
视图的分类
特性 简单视图 复杂视图
表的数量 一个 一个或多个
函数 没有 有
分组 没有 有
DML 操作 可以 有时可以
2、创建视图
语法:CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view
[(alias[, alias]...)]
AS subquery
[WITH CHECK OPTION [CONSTRAINT constraint]]
[WITH READ ONLY [CONSTRAINT constraint]];
修改视图结构没有:ALTER,通过 OR REPLACE
3、查询视图数据、添加、修改、删除视图数据
视图中使用DML的规定:
- 当视图定义中包含以下元素之一时不能使用delete:
组函数
GROUP BY 子句
DISTINCT 关键字
ROWNUM 伪列
- 以下元素之一时不能使用update:
组函数
GROUP BY子句
DISTINCT 关键字
ROWNUM 伪列
列的定义为表达式
- 以下元素之一时不能使insert:
组函数
GROUP BY 子句
DISTINCT 关键字
ROWNUM 伪列
列的定义为表达式
表中非空的列在视图定义中未包括
- 屏蔽视图DML操作,不让通过视图进行增删改
WITH READ ONLY
- 删除视图:
DROP VIEW 视图名;
4、TOP-N (ROWNUM)伪列
Top-N 分析查询一个列中最大或最小的 n 个值:
销售量最高的十种产品是什么?
销售量最差的十种产品是什么?
SELECT * FROM (
SELECT employee_id,last_name,salary,department_id
FROM employees
WHERE salary>10000);
-- 简单视图
CREATE VIEW emp_vu AS
SELECT employee_id,last_name,salary,department_id
FROM employees
WHERE salary>10000;
SELECT * FROM emp_vu;
DELETE FROM emp_vu WHERE employee_id = 103;
UPDATE employees SET salary = salary+1000 WHERE employee_id = 205;
UPDATE emp_vu SET salary = salary+1000 WHERE employee_id = 205;
SELECT * FROM employees;
-- 复杂视图
CREATE OR REPLACE VIEW emp_dept_vu002 AS
SELECT e.employ