ORACLE SQL 视图

ORACLE SQL 视图

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

开发工具与关键技术:Oracle sql*plus  PLSQL Developer

作者:陈小白

撰写时间:2019年0325

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

视图:

视图是数据库对象的一种,是从表中抽出的逻辑上相关的数据集合。
视图是一种虚表。

视图建立在已有表的基础上, 视图赖以建立的这些表称为基表

向视图提供数据内容的语句为 SELECT 语句, 可以将视图理解为存储起来的 SELECT 语句. 

视图向用户提供基表数据的另一种表现形式

 

为什么使用视图?

控制数据访问

简化查询

避免重复访问相同的数据

 

简单的视图和复杂的视图

特性

简单视图

复杂视图

表的数量

一个

一个或多个

函数

没有

分组

没有

DML操作

可以

有时可以

 

 

 

 

 

 

创建视图

在 CREATE VIEW 语句中嵌入子查询

创建视图时在子查询中给列定义别名

REATE VIEW (视图名)AS子查询

CREATE  VIEW  STUS001

AS SELECT SNO,NAME,CLASS

FROM STU2

WHERE CLASS=’17-01’;

查询视图

SELECT *

FROM  STUS001;

 

ORACLE SQL 视图_第1张图片

修改视图

使用CREATE OR REPLACE VIEW 子句修改视图

CREATE VIEW 子句中各列的别名应和子查询中各列相对应

CREATE OR REPLACE VIEW STUS001

    (SNO,NAME,CLASS) AS

    SELECT SNO,NAME||’ IS ’||SSEX,CLASS

    FROM STU2

  WHERE CLASS=’17-01’;

执行成功后,查询

 

ORACLE SQL 视图_第2张图片

视图中使规用DML的规定:可以在简单视图中执行 DML 操作

1.当视图定义中包含以下元素之一时不能使用update:

组函数

GROUP BY子句

DISTINCT 关键字

ROWNUM 伪列

列的定义为表达式

当视图定义中包含以下元素之一时不能使用delete:

组函数

GROUP BY 子句

DISTINCT 关键字

ROWNUM 伪列

当视图定义中包含以下元素之一时不能使insert:

组函数

GROUP BY 子句

DISTINCT 关键字

ROWNUM 伪列

列的定义为表达式

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

屏蔽DML操作

可以使用 WITH READ ONLY 选项屏蔽对视图的DML 操作

任何 DML 操作都会返回一个Oracle server 错误

CREATE OR REPLACE VIEW  STUS001

    (SNO,NAME,CLASS) AS

    SELECT SNO,NAME|| IS ||SSEX,CLASS

    FROM STU2

  WHERE CLASS=17-01

  WITH READ ONLY;

删除视图:DROP VIEW (视图名)

删除视图只是删除视图的定义,并不会删除基表的数据

DROP VIEW STUS001;

 

Top-N 分析ROWNUM

Top-N 分析查询一个列中最大或最小的 n 个值:

成绩最高的两名同学的学号?

成绩两名同学的学号?

最大和最小的值的集合是 Top-N 分析所关心的

说明: rownum "伪列" 数据表本身并没有这样的列, 是 oracle 数据库为每个数据表 "加上的"列.

可以标识行号.默认情况下 rownum 按主索引来排序. 若没有主索引则自然排序.

注意:

对 ROWNUM 只能使用 < 或 <=, 而用 =, >, >= 都将不能返回任何数据。

应用:成绩最高的两名同学的学号?  成绩两名同学的学号?

SELECT ROWNUM,SNO,DEGREE

FROM (SELECT SNO,DEGREE

FROM SCORE

ORDER BY DEGREE DESC)

WHERE ROWNUM<=2;

ORACLE SQL 视图_第3张图片

查询排在第2到第10名同学的学号和成绩   

SELECT *

FROM (SELECT ROWNUM  RN,SNO,DEGREE

FROM (SELECT SNO,DEGREE

FROM SCORE

ORDER BY DEGREE DESC))

WHERE RN >=2 AND RN <=10;

 

ORACLE SQL 视图_第4张图片

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(Oracle)