oracle视图(oracle 视图_oracle查询所有视图)

发布时间:2025-12-10 19:32:09 浏览次数:7

oracle 视图_oracle查询所有视图-oracle视图优化查询速度

oracle 视图_oracle查询所有视图常见的数据库对象表EMPLOYEES:视图视图是一种虚表。视图建立在已有表的基础上,视图赖以建立的这些表称为基表。向视图提供数据内容的语句为SELECT语句,可以将视图理解为存储起来的SELECT语句.视图向用户提供基表数据的另一种表现形式为什么使用视图控制数据访问简化查询避免重复访问相同的数据简单视图和复杂视图创建视图在CREATEVIEW语句中嵌入子查询CREATE[ORREPLACE][FORCE|NOFORCE]VIEWview_oracle视图

1 常见的数据库对象

对象描述
基本的数据存储集合,由行和列组成
试图从表中抽出来的逻辑上相关的数据集合
序列提供有规律的数值
索引提高查询的效率
同义词给对象起别名

2 为什么使用视图

控制数据访问简化查询避免重复访问相同的数据

3 视 图

视图是一种虚表。视图建立在已有表的基础上, 视图赖以建立的这些表称为基表。向视图提供数据内容的语句为 SELECT 语句, 可以将视图理解为存储起来的 SELECT 语句.视图向用户提供基表数据的另一种表现形式

简单视图和复杂视图

特征简单视图复杂试图
表的数量一个多个
函数没有
分组没有
DML 操作可以不可以

4 创建视图

在 CREATE VIEW 语句中嵌入子查询(语法)

CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view  [(alias[, alias]...)] AS subquery[WITH CHECK OPTION [CONSTRAINT constraint]][WITH READ ONLY [CONSTRAINT constraint]];

希望我今天分享的这篇文章可以帮到您。

子查询可以是复杂的 SELECT 语句

create or replace view empview as select employee_id emp_id,last_name name,department_namefrom employees e,departments dWhere e.department_id = d.department_id

创建视图举例

CREATE VIEW empvu80 AS SELECT  employee_id, last_name, salary    FROM    employees    WHERE   department_id = 80;View created.

6 描述视图结构

DESCRIBE empvu80

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

创建完成后在选择视图中的列时应使用别名

CREATE VIEW salvu50 AS SELECT  employee_id ID_NUMBER, last_name NAME,            salary*12 ANN_SALARY    FROM    employees    WHERE   department_id = 50;View created.

7 查询视图

SELECT *FROMsalvu50;


8 修改视图

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

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

CREATE OR REPLACE VIEW empvu80  (id_number, name, sal, department_id)AS SELECT  employee_id, first_name || ' ' || last_name,            salary, department_id   FROM    employees   WHERE   department_id = 80;View created.

创建复杂视图举例

CREATE VIEWdept_sum_vu  (name, minsal, maxsal, avgsal)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;View created.

视图中使用DML的规定

可以在简单视图中执行 DML 操作
当视图定义中包含以下元素之一时不能使用delete
组函数
GROUP BY 子句
DISTINCT 关键字
ROWNUM 伪列
create or replace view sal_viewas selectavg(salary) avg_sal from employeesgroup by department_id

9 视图中使用DML的规定

当视图定义中包含以下元素之一时不能使用update
组函数
GROUP BY子句
DISTINCT 关键字
ROWNUM 伪列
列的定义为表达式
当视图定义中包含以下元素之一时不能使insert
组函数
GROUP BY 子句
DISTINCT 关键字
ROWNUM 伪列
列的定义为表达式
表中非空的列在视图定义中未包括

10 屏蔽 DML 操作

可以使用 WITH READ ONLY 选项屏蔽对视图的DML 操作任何 DML 操作都会返回一个Oracle server 错误

屏蔽 DML 操作

CREATE OR REPLACE VIEW empvu10    (employee_number, employee_name, job_title)AS SELECTemployee_id, last_name, job_id   FROM     employees   WHERE    department_id = 10   WITH READ ONLY;View created.

删除视图

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

DROP VIEW view;DROP VIEW empvu80;View dropped.

11 Top-N 分析

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

销售量最高的十种产品是什么?销售量最差的十种产品是什么?

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

查询最大的几个值的 Top-N 分析:

SELECT [column_list], ROWNUM  FROM   (SELECT [column_list]         FROM table        ORDER  BY Top-N_column)WHERE  ROWNUM <=  N;

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

Top-N 分析

Top-N 分析(查询工资最高的三名员工)

SQL> SELECT ROWNUM as RANK, last_name, salary  2  FROM  (SELECT last_name,salary FROM employees  3         ORDER BY salary DESC)  4  WHERE ROWNUM <= 3;      RANK LAST_NAME                     SALARY---------- ------------------------- ----------         1 King                        24000.00         2 Kochhar                     17000.00         3 De Haan                     17000.00
SQL> select *  2  from(  3  select rownum rn,employee_id,salary  4  from(  5  select employee_id,salary,last_name  6  from employees  7  order by salary desc  8  )  9  )where rn <=50 and rn >40 10  /        RN EMPLOYEE_ID     SALARY---------- ----------- ----------        41         154    7500.00        42         171    7400.00        43         172    7300.00

总结

控制数据访问简化查询数据独立性删除时不删除数据Top-N 分析
需要做网站?需要网络推广?欢迎咨询客户经理 13272073477