oracle视图

目录

1.视图概述

2.视图的创建

3.视图中使用DML的规定

4.屏蔽DML操作

5.删除视图

6.Top-N分析

(1)练习


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;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值