目录
1.视图概述
-
视图是一种虚表
-
视图建立在已有表的基础上, 视图赖以建立的这些表称为基表
-
向视图提供数据内容的语句为 SELECT 语句, 可以将视图理解为存储起来的 SELECT 语句
-
视图向用户提供基表数据的另一种表现形式
特性 | 简单视图 | 复杂视图 |
---|---|---|
表的数量 | 一个 | 一个或多个 |
函数 | 没有 | 有 |
分组 | 没有 | 有 |
DML 操作 | 可以 | 有时可以 |
2.视图的创建
-
在 CREATE VIEW 语句中嵌入子查询
-- 格式:
create view 视图名
as
子查询语句
-
描述视图结构
-- 格式:
DESCRIBE 视图名
-
创建视图时在子查询中给列定义别名后,在选择视图中的列时应使用别名
-- 创建empview2视图:
create view empview2
as
select last_name name,salary
from employees
where department_id=20
-- 查询empview2视图,此时的last_name已经成为了name
select name,salary
from empview2
-
修改视图
-- 使用CREATE OR REPLACE VIEW 子句修改视图
CREATE OR REPLACE VIEW 视图名
as
新的子查询语句
-
创建复杂视图
CREATE VIEW dept_sum_vu
AS SELECT d.department_name, MIN(e.salary),
MAX(e.salary),AVG(e.salary)
FROM employees e, departments d
WHERE e.department_id = d.department_id
GROUP BY d.department_name;
3.视图中使用DML的规定
当视图定义中包含以下元素之一时不能使用delete:
组函数
GROUP BY 子句
DISTINCT 关键字
ROWNUM 伪列
当视图定义中包含以下元素之一时不能使用update:
组函数
GROUP BY子句
DISTINCT 关键字
ROWNUM 伪列
列的定义为表达式
当视图定义中包含以下元素之一时不能使insert:
组函数
GROUP BY 子句
DISTINCT 关键字
ROWNUM 伪列
列的定义为表达式
表中非空的列在视图定义中未包括
4.屏蔽DML操作
/*
屏蔽 DML 操作:
可以使用 WITH READ ONLY 选项屏蔽对视图的DML操作
任何 DML 操作都会返回一个Oracle server 错误
*/
CREATE OR REPLACE VIEW empvu10 (employee_number, employee_name, job_title)
AS
SELECT employee_id, last_name, job_id
FROM employees
WHERE department_id = 10
WITH READ ONLY;
5.删除视图
-- 删除视图只是删除视图的定义,并不会删除基表的数据
DROP VIEW 表名;
6.Top-N分析
-- 查询最大的几个值的 Top-N 分析:
/*
格式:
SELECT [column_list], ROWNUM
FROM (SELECT [column_list]
FROM table
ORDER BY Top-N_column)
WHERE ROWNUM <= N;
*/
-
对 ROWNUM 只能使用 < 或 <=, 而用 =, >, >= 都将不能返回任何数据。
(1)练习
-- 对 oralce 数据库中记录进行分页: 每页显示 10 条记录, 查询第 5 页的数据
select employee_id, last_name, salary
from (
select rownum rn, employee_id, last_name, salary
from employees
) e
where e.rn <= 50 and e.rn > 40
--查询工资最高的三名员工
SELECT ROWNUM, last_name, salary
FROM (SELECT last_name,salary FROM employees
ORDER BY salary DESC)
WHERE ROWNUM <= 3;