当前位置:数据库 > Oracle >>

Oracle DB视图

Oracle DB视图
 
什么是视图
通过创建表的视图可以显示数据的逻辑子集或组合。视图是一种基于表或其它视图的逻辑表。视图没有自己的数据,但它如同一个窗口,通过它可以查看或更改表中的数据。视图所基于的表被称为基表。视图以SELECT 语句的形式存储在数据字典中。
 
视图的优点
• 由于视图可以显示表中的选定列,因而可以限制对数据的访问。
• 视图可用来通过进行简单查询来检索复杂查询的结果。例如,用户在不了解如何编写联接语句时,使用视图就可以查询多个表中的信息。
• 视图为特定用户和特定应用程序提供了数据独立性。一个视图可用来检索多个表中的数据。
• 通过视图,用户组可根据各自的特定标准访问数据。
 
简单视图和复杂视图
 
 
 
视图有两种分类:简单视图和复杂视图。这两类视图的基本差别与DML(INSERT 、UPDATE 和DELETE )操作有关。
• 简单视图有如下特点:
- 只从一个表中获得数据
- 不包含函数或数据组
- 可以通过视图执行DML 操作
• 复杂视图有如下特点:
- 从多个表中获得数据
- 包含函数或数据组
- 不一定允许通过视图执行DML 操作
 
创建视图
• 在CREATE VIEW 语句中嵌入一个子查询:
CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view
[(alias [,  alias ]...)]
AS subquery
[WITH CHECK O PTION [CONSTRAINT  constraint ]]
[WITH READ ON LY [CONSTRAINT  constraint ]];
 
• 子查询可以包含复杂的SELECT 语法。
 
 
可以通过在CREATE VIEW 语句中嵌入子查询来创建视图。
在该语法中:
OR REPLACE :如果该视图已存在则重新创建
FORCE :不管基表是否存在都创建视图
NOFORCE :仅当基表存在时才创建视图(默认设置)
view :是视图的名称
alias :指定由视图查询选定的表达式的名称(别名的数量必须与视图选择表达式数量匹配)
subquery :是一个完整的SELECT 语句(可以在SELECT 列表中使用列的别名
WITH CHECK OPTION: 指定只插入或只更新视图中可以访问的那些行
constraint: 是为CHECK OPTION约束条件指定的名称
WITH READ ONLY :确保不对此视图执行DML 操作
 
• 创建视图EMPVU80,视图包含部门80 中每位雇员的雇员编号、姓氏和薪金:
hr@TEST0924> create view empvu80
  2  as select EMPLOYEE_ID,LAST_NAME,SALARY from employees where EMPLOYEE_ID=80;
 
View created.
 
• 使用SQL*Plus DESCRIBE 命令描述视图的结构:
DESCRIBE empvu80
hr@TEST0924> desc empvu80
 Name                                                  Null?    Type
 ----------------------------------------------------- -------- ------------------------------------
 EMPLOYEE_ID                                           NOT NULL NUMBER(6)
 LAST_NAME                                             NOT NULL VARCHAR2(25)
 SALARY                                                         NUMBER(8,2)
 
• 在子查询中使用列别名创建视图,可以通过将列别名包含在子查询中来控制列名:
hr@TEST0924> create view salvu50
  2  as select EMPLOYEE_ID id_number,LAST_NAME name,SALARY*12 ann_salary from employees where EMPLOYEE_ID=50;
 
View created.
 
hr@TEST0924> desc salvu50
 Name                                                  Null?    Type
 ----------------------------------------------------- -------- ------------------------------------
 ID_NUMBER                                             NOT NULL NUMBER(6)
 NAME                                                  NOT NULL VARCHAR2(25)
 ANN_SALARY                                                     NUMBER
示例中创建了一个视图,其中包含部门50 中每位雇员的以下信息:别名为ID_NUMBER 的雇员编号( EMPLOYEE_ID ) 、别名为NAME 的姓名( LAST_NAME)  以及别名为ANN_SALARY的年薪( SALARY ) 。
 
你也可以在CREATE 语句之后和SELECT 子查询之前使用别名。列出的别名数量必须与在子查询中选定的表达式数量相匹配。
hr@TEST0924> CREATE OR REPLACE VIEW salvu50 (ID_NUMBER, NAME, ANN_SALARY)
  2  AS SELECT  employee_id, last_name, salary*12 FROM    employees WHERE   department_id = 50;
 
View created.
 
hr@TEST0924> desc salvu50
 Name                                                  Null?    Type
 ----------------------------------------------------- -------- ------------------------------------
 ID_NUMBER                                             NOT NULL NUMBER(6)
 NAME                                                  NOT NULL VARCHAR2(25)
 ANN_SALARY                                                     NUMBER
 
 
准则
• 定义视图的子查询可以包含复杂的SELECT 语法,其中包括联接、分组和子查询。
• 如果你没有为使用WITH CHECK OPTION创建的视图指定约束条件名称,系统则会以SYS_Cn 格式指定默认名称。
• 可以使用OR REPLACE选项更改视图的定义,而不必在删除该视图后再重新创建,也不必对其重新授予以前授予过的对象权限。
 
从视图中检索数据
你可以从视图中检索数据,就像从任何表中检索数据一样。可以显示整个视图的内容,也可以只显示特定的行或列。
hr@TEST0924> select * from salvu50;
 
 ID_NUMBER NAME                      ANN_SALARY
---------- ------------------------- ----------
       198 OConnell                       31200
       199 Grant                          31200
...
45 rows selected.
 
修改视图
• 可以使用CREATE OR REPLACE VIEW子句修改视图EMPVU80。为每个列名添加一个别名:
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,