精华内容
下载资源
问答
  • 视图的概念  视图是基于一张表或多张表或另外一个视图的逻辑表。视图不同于表,视图本身不包含任何数据。表是实际独立存在的实体,是用于存储数据的基本结构。而视图只是一种定义,对应一个查询语句。视图的数据都...
    视图的概念
      视图是基于一张表或多张表或另外一个视图的逻辑表。视图不同于表,视图本身不包含任何数据。表是实际独立存在的实体,是用于存储数据的基本结构。而视图只是一种定义,对应一个查询语句。视图的数据都来自于某些表,这些表被称为基表。通过视图来查看表,就像是从不同的角度来观察一个(或多个)表。
    视图有如下一些优点:
    * 可以提高数据访问的安全性,通过视图往往只可以访问数据库中表的特定部分,限制了用户访问表的全部行和列。
    * 简化了对数据的查询,隐藏了查询的复杂性。视图的数据来自一个复杂的查询,用户对视图的检索却很简单。
    * 一个视图可以检索多张表的数据,因此用户通过访问一个视图,可完成对多个表的访问。
    * 视图是相同数据的不同表示,通过为不同的用户创建同一个表的不同视图,使用户可分别访问同一个表的不同部分。
    视图可以在表能够使用的任何地方使用,但在对视图的操作上同表相比有些限制,特别是插入和修改操作。对视图的操作将传递到基表,所以在表上定义的约束条件和触发器在视图上将同样起作用。

    视图的创建
    创建视图需要CREAE VIEW系统权限,视图的创建语法如下:
    CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW 视图名[(别名1[,别名2...])]
    AS 子查询
    [WITH CHECK OPTION [CONSTRAINT 约束名]]
    [WITH READ ONLY]
    其中:
    OR REPLACE 表示替代已经存在的视图。
    FORCE表示不管基表是否存在,创建视图。
    NOFORCE表示只有基表存在时,才创建视图,是默认值。
    别名是为子查询中选中的列新定义的名字,替代查询表中原有的列名。
    子查询是一个用于定义视图的SELECT查询语句,可以包含连接、分组及子查询。
    WITH CHECK OPTION表示进行视图插入或修改时必须满足子查询的约束条件。后面的约束名是该约束条件的名字。
    WITH READ ONLY 表示视图是只读的。
    删除视图的语法如下:
    DROP VIEW 视图名;
    删除视图者需要是视图的建立者或者拥有DROP ANY VIEW权限。视图的删除不影响基表,不会丢失数据。
    1.创建简单视图 
    创建图书作者视图。
    步骤1:创建图书作者视图:
    Sql代码  收藏代码
    1. CREATE VIEW 图书作者(书名,作者)   
    2.         AS SELECT 图书名称,作者 FROM 图书;  

    输出结果:
    视图已建立。
    步骤2:查询视图全部内容
    Sql代码  收藏代码
    1. SELECT * FROM 图书作者;  

    输出结果:
    Sql代码  收藏代码
    1. 书名                           作者  
    2.         -------------------------------- --------------------  
    3.         计算机原理                     刘勇  
    4.          C语言程序设计                马丽  
    5.         汇编语言程序设计               黄海明  

    步骤3:查询部分视图:
    Sql代码  收藏代码
    1. SELECT 作者 FROM 图书作者;  

    输出结果:
    Sql代码  收藏代码
    1. 作者  
    2.         ----------  
    3.         刘勇  
    4.         马丽  
    5.         黄海明  

    说明:本训练创建的视图名称为“图书作者”,视图只包含两列,为“书名”和“作者”,对应图书表的“图书名称”和“作者”两列。如果省略了视图名称后面的列名,则视图会采用和表一样的列名。对视图查询和对表查询一样,但通过视图最多只能看到表的两列,可见视图隐藏了表的部分内容。
    创建清华大学出版社的图书视图。
    步骤1:创建清华大学出版社的图书视图:
    Sql代码  收藏代码
    1. CREATE VIEW 清华图书   

    AS SELECT 图书名称,作者,单价 FROM 图书 WHERE 出版社编号= '01';
    执行结果:
    视图已建立。
    步骤2:查询图书视图:
    Sql代码  收藏代码
    1. SELECT * FROM 清华图书;  

    执行结果:
    Sql代码  收藏代码
    1. 图书名称                       作者             单价  
    2. -------------------------------------------- ---------- -----------------------  
    3.         计算机原理                     刘勇             25.3  

    步骤3:删除视图:
    Sql代码  收藏代码
    1. DROP VIEW 清华图书;  

    执行结果:
    视图已丢掉。 
    说明:该视图包含了对记录的约束条件。
    2.创建复杂视图
    修改作者视图,加入出版社名称。
    步骤1:重建图书作者视图:
    Sql代码  收藏代码
    1. CREATE OR REPLACE VIEW 图书作者(书名,作者,出版社)   
    2.         AS SELECT 图书名称,作者,出版社名称 FROM 图书,出版社   
    3.         WHERE 图书.出版社编号=出版社.编号;  

    输出结果:
    视图已建立。
    步骤2:查询新视图内容:
    Sql代码  收藏代码
    1. SELECT * FROM 图书作者;  

    输出结果:
    Sql代码  收藏代码
    1. 书名                           作者       出版社  
    2.         -------------------------------------------- ---------- ----------------------------  
    3.         计算机原理               刘勇       清华大学出版社  
    4.         C语言程序设计         马丽       电子科技大学出版社  
    5.         汇编语言程序设计     黄海明     电子科技大学出版社  

    说明:本训练中,使用了OR REPLACE选项,使新的视图替代了同名的原有视图,同时在查询中使用了相等连接,使得视图的列来自于两个不同的基表。
    创建一个统计视图。
    步骤1:创建emp表的一个统计视图:
    Sql代码  收藏代码
    1. CREATE VIEW 统计表(部门名,最大工资,最小工资,平均工资)  
    2.         AS SELECT DNAME,MAX(SAL),MIN(SAL),AVG(SAL) FROM EMP E,DEPT D  
    3.         WHERE E.DEPTNO=D.DEPTNO GROUP BY DNAME;  

    执行结果:
    视图已建立。
    步骤2:查询统计表:
    Sql代码  收藏代码
    1. SELECT * FROM 统计表;  

    执行结果:
    Sql代码  收藏代码
    1. 部门名       最大工资    最小工资    平均工资  
    2.         -------------------------- --------------- ----------------- ------------------  
    3.         ACCOUNTING          5000       1300        3050  
    4.         RESEARCH             3000        800        2175  
    5.         SALES                  2850        950   1566.66667  

    说明:本训练中,使用了分组查询和连接查询作为视图的子查询,每次查询该视图都可以得到统计结果。
    创建只读视图
    创建只读视图要用WITH READ ONLY选项。
    创建只读视图。
    步骤1:创建emp表的经理视图:
    Sql代码  收藏代码
    1. CREATE OR REPLACE VIEW manager   
    2.         AS SELECT * FROM emp WHERE job= 'MANAGER'  
    3.         WITH READ ONLY;  

    执行结果:
    视图已建立。
    步骤2:进行删除:
    Sql代码  收藏代码
    1. DELETE FROM manager;  

    执行结果:
    ERROR 位于第 1 行:
    ORA-01752: 不能从没有一个键值保存表的视图中删除
    4.创建基表不存在的视图
    正常情况下,不能创建错误的视图,特别是当基表还不存在时。但使用FORCE选项就可以在创建基表前先创建视图。创建的视图是无效视图,当访问无效视图时,Oracle将重新编译无效的视图。
    使用FORCE选项创建带有错误的视图:
    Sql代码  收藏代码
    1. CREATE FORCE VIEW 班干部 AS SELECT * FROM 班级 WHERE 职务 IS NOT NULL;  

    执行结果:
    警告: 创建的视图带有编译错误。
    视图的操作
    对视图经常进行的操作是查询操作,但也可以在一定条件下对视图进行插入、删除和修改操作。对视图的这些操作最终传递到基表。但是对视图的操作有很多限定。如果视图设置了只读,则对视图只能进行查询,不能进行修改操作。
    1.视图的插入 
    视图插入练习。
    步骤1:创建清华大学出版社的图书视图:
    Sql代码  收藏代码
    1. CREATE OR REPLACE VIEW 清华图书   
    2.         AS SELECT * FROM 图书 WHERE 出版社编号= '01';  

    执行结果:
    视图已建立。
    步骤2:插入新图书:
    Sql代码  收藏代码
    1. INSERT INTO 清华图书 VALUES('A0005','软件工程','01','冯娟',5,27.3);  

    执行结果:
    已创建 1 行。
    步骤3:显示视图:
    Sql代码  收藏代码
    1. SELECT * FROM 清华图书;  

    执行结果:
    Sql代码  收藏代码
    1. 图书  图书名称                       出 作者             数量       单价  
    2.         -------- ---------------------------------------- ----------- -------- ------------------------ --------------  
    3.         A0001 计算机原理                     01 刘勇                5       25.3  
    4. A0005 软件工程                       01 冯娟                5       27.3  

    步骤4:显示基表
    Sql代码  收藏代码
    1. SELECT * FROM 图书;  

    执行结果:
    Sql代码  收藏代码
    1. 图书  图书名称         出 作者       数量       单价  
    2.         -------- ------------------------------------------ ------- ---------------- ----------------- ---------------  
    3.         A0001 计算机原理           01 刘勇        5        25.3  
    4.         A0002  C语言程序设计        02 马丽    1       18.75  
    5.         A0003 汇编语言程序设计     02 黄海明       15       20.18  
    6.         A0005 软件工程              01 冯娟        5        27.3  

    说明:通过查看视图,可见新图书插入到了视图中。通过查看基表,看到该图书也出现在基表中,说明成功地进行了插入。新图书的出版社编号为“01”,仍然属于“清华大学出版社”。
    但是有一个问题,就是如果在“清华图书”的视图中插入其他出版社的图书,结果会怎么样呢?结果是允许插入,但是在视图中看不见,在基表中可以看见,这显然是不合理的。
    2.使用WITH CHECK OPTION选项
    为了避免上述情况的发生,可以使用WITH CHECK OPTION选项。使用该选项,可以对视图的插入或更新进行限制,即该数据必须满足视图定义中的子查询中的WHERE条件,否则不允许插入或更新。比如“清华图书”视图的WHERE条件是出版社编号要等于“01”(01是清华大学出版社的编号),所以如果设置了WITH CHECK OPTION选项,那么只有出版社编号为“01”的图书才能通过清华视图进行插入。
    使用WITH CHECK OPTION选项限制视图的插入。
    步骤1:重建清华大学出版社的图书视图,带WITH CHECK OPTION选项:
    Sql代码  收藏代码
    1. CREATE OR REPLACE VIEW 清华图书   
    2.         AS SELECT * FROM 图书 WHERE 出版社编号= '01'  
    3.         WITH CHECK OPTION;  

    执行结果:
    视图已建立。
    步骤2:插入新图书:
    Sql代码  收藏代码
    1. INSERT INTO 清华图书 VALUES('A0006','Oracle数据库','02','黄河',3,39.8);  

    执行结果:
    ERROR 位于第 1 行:
    ORA-01402: 视图 WITH CHECK OPTIDN 违反 where 子句
    说明:可见通过设置了WITH CHECK OPTION选项,“02”出版社的图书插入受到了限制。如果修改已有图书的出版社编号情况会如何?答案是将同样受到限制。要是删除视图中已有图书,结果又将怎样呢?答案是可以,因为删除并不违反WHERE条件。
    3.来自基表的限制
    除了以上的限制,基表本身的限制和约束也必须要考虑。如果生成子查询的语句是一个分组查询,或查询中出现计算列,这时显然不能对表进行插入。另外,主键和NOT NULL列如果没有出现在视图的子查询中,也不能对视图进行插入。在视图中插入的数据,也必须满足基表的约束条件。
    基表本身限制视图的插入。
    步骤1:重建图书价格视图:
    Sql代码  收藏代码
    1. CREATE OR REPLACE VIEW 图书价格   
    2.         AS SELECT 图书名称,单价 FROM 图书;  

    执行结果:
    视图已建立。
    步骤2:插入新图书:
    Sql代码  收藏代码
    1. INSERT INTO 图书价格 VALUES('Oracle数据库',39.8);  

    执行结果:
    ERROR 位于第 1 行:
    ORA-01400: 无法将 NULL 插入 ("SCOTT"."图书"."图书编号")
    说明:在视图中没有出现的基表的列,在对视图插入时,自动默认为NULL。该视图只有两列可以插入,其他列将默认为空。插入出错的原因是,在视图中不能插入图书编号,而图书编号是图书表的主键,是必须插入的列,不能为空,这就产生了矛盾。
    视图的查看
    USER_VIEWS字典中包含了视图的定义。
    USER_UPDATABLE_COLUMNS字典包含了哪些列可以更新、插入、删除。
    USER_OBJECTS字典中包含了用户的对象。
    可以通过DESCRIBE命令查看字典的其他列信息。在这里给出一个训练例子。
    查看清华图书视图的定义:
    Sql代码  收藏代码
    1. SELECT TEXT FROM USER_VIEWS WHERE VIEW_NAME='清华图书';  

    执行结果:
    Sql代码  收藏代码
    1. TEXT  
    2.         -----------------------------------------------------------------------------------------------  
    3.         SELECT 图书名称,作者,单价 FROM 图书 WHERE 出版社编号='01'   

    查看用户拥有的视图:
    Sql代码  收藏代码
    1. SELECT object_name FROM user_objects WHERE object_type='VIEW';  

    执行结果:
    Sql代码  收藏代码
    1. OBJECT_NAME  
    2.         ----------------------------------------------------------------------------------------------  
    3.         清华图书  
    4.         图书作者  


    黑色头发:http://heisetoufa.iteye.com/
    展开全文
  • 视图 视图定义: 基于多表预定义查询,这些表称为基表 可以通过视图对基表进行DML操作 在视图中检索信息与从基表中检索信息方法完全相同注意...限制用户只能访问基表部分数据,实现安全性创建视图 create

    视图
    视图定义:
    基于多表的预定义查询,这些表称为基表
    可以通过视图对基表进行DML操作
    在视图中检索信息与从基表中检索信息方法完全相同

    注意:视图不存在数据,算是个虚表,视图只会访问基表的行

    适用于:检查检索数据

    优点:
    限制用户只能通过视图检索数据,使用户看不到底层基表
    将复杂查询编写为视图,降低sql的复杂性
    限制用户只能访问基表的部分数据,实现安全性

    创建视图
    create [or replace] [force| noforcce] view 视图名【(别名,【别名】….)】
    as
    子查询(不能包含order by)
    【with {check option | read only }【constraint 约束名】】

    force:如果基表不存在,创建视图就会失败。但是可以使用force选项强制创建视图

    noforcce:基表存在,才能创建视图

    with check option :所插入的数据或者修改的数据行必须满足视图定义的约束条件,也就是说子查询的数据在插入视图中时,必须满足视图定义的约束条件
    约束条件为子查询定义的where 条件
    这里写图片描述
    这里写图片描述

    with read only :保证该视图不能进行任何的DML操作

    replace:如果有视图存在,就替换

    案列

    这里写图片描述

    这里写图片描述

    注意:子查询可以多表连接,返回的结果作为视图的数据

    视图的表结构
    desc + 视图名
    这里写图片描述

    创建视图的语句
    select view_name,text from user_views;
    view_name:视图名
    text :创建视图的语句
    这里写图片描述

    查看视图哪些列是可以进行DML操作
    select column_name,updatable,insertable,deletable from user_updatable_columns
    where table_name=upper(‘vstu’);
    table_name:视图名称

    这里写图片描述

    展开全文
  • 视图的概念   视图是基于一张表或多张表或另外一个视图的逻辑表。视图不同于表,视图本身不包含任何数据。表是实际独立存在的实体,是用于存储数据的基本结构。而视图只是一种定义,对应一个查询语句。视图的数据...
    视图的概念 
      视图是基于一张表或多张表或另外一个视图的逻辑表。视图不同于表,视图本身不包含任何数据。表是实际独立存在的实体,是用于存储数据的基本结构。而视图只是一种定义,对应一个查询语句。视图的数据都来自于某些表,这些表被称为基表。通过视图来查看表,就像是从不同的角度来观察一个(或多个)表。 
    视图有如下一些优点: 
    * 可以提高数据访问的安全性,通过视图往往只可以访问数据库中表的特定部分,限制了用户访问表的全部行和列。 
    * 简化了对数据的查询,隐藏了查询的复杂性。视图的数据来自一个复杂的查询,用户对视图的检索却很简单。 
    * 一个视图可以检索多张表的数据,因此用户通过访问一个视图,可完成对多个表的访问。 
    * 视图是相同数据的不同表示,通过为不同的用户创建同一个表的不同视图,使用户可分别访问同一个表的不同部分。 
    视图可以在表能够使用的任何地方使用,但在对视图的操作上同表相比有些限制,特别是插入和修改操作。对视图的操作将传递到基表,所以在表上定义的约束条件和触发器在视图上将同样起作用。 

    视图的创建 
    创建视图需要CREAE VIEW系统权限,视图的创建语法如下: 
    CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW 视图名[(别名1[,别名2...])] 
    AS 子查询 
    [WITH CHECK OPTION [CONSTRAINT 约束名]] 
    [WITH READ ONLY] 
    其中: 
    OR REPLACE 表示替代已经存在的视图。 
    FORCE表示不管基表是否存在,创建视图。 
    NOFORCE表示只有基表存在时,才创建视图,是默认值。 
    别名是为子查询中选中的列新定义的名字,替代查询表中原有的列名。 
    子查询是一个用于定义视图的SELECT查询语句,可以包含连接、分组及子查询。 
    WITH CHECK OPTION表示进行视图插入或修改时必须满足子查询的约束条件。后面的约束名是该约束条件的名字。 
    WITH READ ONLY 表示视图是只读的。 
    删除视图的语法如下: 
    DROP VIEW 视图名; 
    删除视图者需要是视图的建立者或者拥有DROP ANY VIEW权限。视图的删除不影响基表,不会丢失数据。 
    1.创建简单视图  
    创建图书作者视图。 
    步骤1:创建图书作者视图: 
    Sql代码  收藏代码
    1. CREATE VIEW 图书作者(书名,作者)   
    2.         AS SELECT 图书名称,作者 FROM 图书;  

    输出结果: 
    视图已建立。 
    步骤2:查询视图全部内容 
    Sql代码  收藏代码
    1. SELECT * FROM 图书作者;  

    输出结果: 
    Sql代码  收藏代码
    1. 书名                           作者  
    2.         -------------------------------- --------------------  
    3.         计算机原理                     刘勇  
    4.          C语言程序设计                马丽  
    5.         汇编语言程序设计               黄海明  

    步骤3:查询部分视图: 
    Sql代码  收藏代码
    1. SELECT 作者 FROM 图书作者;  

    输出结果: 
    Sql代码  收藏代码
    1. 作者  
    2.         ----------  
    3.         刘勇  
    4.         马丽  
    5.         黄海明  

    说明:本训练创建的视图名称为“图书作者”,视图只包含两列,为“书名”和“作者”,对应图书表的“图书名称”和“作者”两列。如果省略了视图名称后面的列名,则视图会采用和表一样的列名。对视图查询和对表查询一样,但通过视图最多只能看到表的两列,可见视图隐藏了表的部分内容。 
    创建清华大学出版社的图书视图。 
    步骤1:创建清华大学出版社的图书视图: 
    Sql代码  收藏代码
    1. CREATE VIEW 清华图书   

    AS SELECT 图书名称,作者,单价 FROM 图书 WHERE 出版社编号= '01'; 
    执行结果: 
    视图已建立。 
    步骤2:查询图书视图: 
    Sql代码  收藏代码
    1. SELECT * FROM 清华图书;  

    执行结果: 
    Sql代码  收藏代码
    1. 图书名称                       作者             单价  
    2. -------------------------------------------- ---------- -----------------------  
    3.         计算机原理                     刘勇             25.3  

    步骤3:删除视图: 
    Sql代码  收藏代码
    1. DROP VIEW 清华图书;  

    执行结果: 
    视图已丢掉。  
    说明:该视图包含了对记录的约束条件。 
    2.创建复杂视图 
    修改作者视图,加入出版社名称。 
    步骤1:重建图书作者视图: 
    Sql代码  收藏代码
    1. CREATE OR REPLACE VIEW 图书作者(书名,作者,出版社)   
    2.         AS SELECT 图书名称,作者,出版社名称 FROM 图书,出版社   
    3.         WHERE 图书.出版社编号=出版社.编号;  

    输出结果: 
    视图已建立。 
    步骤2:查询新视图内容: 
    Sql代码  收藏代码
    1. SELECT * FROM 图书作者;  

    输出结果: 
    Sql代码  收藏代码
    1. 书名                           作者       出版社  
    2.         -------------------------------------------- ---------- ----------------------------  
    3.         计算机原理               刘勇       清华大学出版社  
    4.         C语言程序设计         马丽       电子科技大学出版社  
    5.         汇编语言程序设计     黄海明     电子科技大学出版社  

    说明:本训练中,使用了OR REPLACE选项,使新的视图替代了同名的原有视图,同时在查询中使用了相等连接,使得视图的列来自于两个不同的基表。 
    创建一个统计视图。 
    步骤1:创建emp表的一个统计视图: 
    Sql代码  收藏代码
    1. CREATE VIEW 统计表(部门名,最大工资,最小工资,平均工资)  
    2.         AS SELECT DNAME,MAX(SAL),MIN(SAL),AVG(SAL) FROM EMP E,DEPT D  
    3.         WHERE E.DEPTNO=D.DEPTNO GROUP BY DNAME;  

    执行结果: 
    视图已建立。 
    步骤2:查询统计表: 
    Sql代码  收藏代码
    1. SELECT * FROM 统计表;  

    执行结果: 
    Sql代码  收藏代码
    1. 部门名       最大工资    最小工资    平均工资  
    2.         -------------------------- --------------- ----------------- ------------------  
    3.         ACCOUNTING          5000       1300        3050  
    4.         RESEARCH             3000        800        2175  
    5.         SALES                  2850        950   1566.66667  

    说明:本训练中,使用了分组查询和连接查询作为视图的子查询,每次查询该视图都可以得到统计结果。 
    创建只读视图 
    创建只读视图要用WITH READ ONLY选项。 
    创建只读视图。 
    步骤1:创建emp表的经理视图: 
    Sql代码  收藏代码
    1. CREATE OR REPLACE VIEW manager   
    2.         AS SELECT * FROM emp WHERE job= 'MANAGER'  
    3.         WITH READ ONLY;  

    执行结果: 
    视图已建立。 
    步骤2:进行删除: 
    Sql代码  收藏代码
    1. DELETE FROM manager;  

    执行结果: 
    ERROR 位于第 1 行: 
    ORA-01752: 不能从没有一个键值保存表的视图中删除 
    4.创建基表不存在的视图 
    正常情况下,不能创建错误的视图,特别是当基表还不存在时。但使用FORCE选项就可以在创建基表前先创建视图。创建的视图是无效视图,当访问无效视图时,Oracle将重新编译无效的视图。 
    使用FORCE选项创建带有错误的视图: 
    Sql代码  收藏代码
    1. CREATE FORCE VIEW 班干部 AS SELECT * FROM 班级 WHERE 职务 IS NOT NULL;  

    执行结果: 
    警告: 创建的视图带有编译错误。 
    视图的操作 
    对视图经常进行的操作是查询操作,但也可以在一定条件下对视图进行插入、删除和修改操作。对视图的这些操作最终传递到基表。但是对视图的操作有很多限定。如果视图设置了只读,则对视图只能进行查询,不能进行修改操作。 
    1.视图的插入  
    视图插入练习。 
    步骤1:创建清华大学出版社的图书视图: 
    Sql代码  收藏代码
    1. CREATE OR REPLACE VIEW 清华图书   
    2.         AS SELECT * FROM 图书 WHERE 出版社编号= '01';  

    执行结果: 
    视图已建立。 
    步骤2:插入新图书: 
    Sql代码  收藏代码
    1. INSERT INTO 清华图书 VALUES('A0005','软件工程','01','冯娟',5,27.3);  

    执行结果: 
    已创建 1 行。 
    步骤3:显示视图: 
    Sql代码  收藏代码
    1. SELECT * FROM 清华图书;  

    执行结果: 
    Sql代码  收藏代码
    1. 图书  图书名称                       出 作者             数量       单价  
    2.         -------- ---------------------------------------- ----------- -------- ------------------------ --------------  
    3.         A0001 计算机原理                     01 刘勇                5       25.3  
    4. A0005 软件工程                       01 冯娟                5       27.3  

    步骤4:显示基表 
    Sql代码  收藏代码
    1. SELECT * FROM 图书;  

    执行结果: 
    Sql代码  收藏代码
    1. 图书  图书名称         出 作者       数量       单价  
    2.         -------- ------------------------------------------ ------- ---------------- ----------------- ---------------  
    3.         A0001 计算机原理           01 刘勇        5        25.3  
    4.         A0002  C语言程序设计        02 马丽    1       18.75  
    5.         A0003 汇编语言程序设计     02 黄海明       15       20.18  
    6.         A0005 软件工程              01 冯娟        5        27.3  

    说明:通过查看视图,可见新图书插入到了视图中。通过查看基表,看到该图书也出现在基表中,说明成功地进行了插入。新图书的出版社编号为“01”,仍然属于“清华大学出版社”。 
    但是有一个问题,就是如果在“清华图书”的视图中插入其他出版社的图书,结果会怎么样呢?结果是允许插入,但是在视图中看不见,在基表中可以看见,这显然是不合理的。 
    2.使用WITH CHECK OPTION选项 
    为了避免上述情况的发生,可以使用WITH CHECK OPTION选项。使用该选项,可以对视图的插入或更新进行限制,即该数据必须满足视图定义中的子查询中的WHERE条件,否则不允许插入或更新。比如“清华图书”视图的WHERE条件是出版社编号要等于“01”(01是清华大学出版社的编号),所以如果设置了WITH CHECK OPTION选项,那么只有出版社编号为“01”的图书才能通过清华视图进行插入。 
    使用WITH CHECK OPTION选项限制视图的插入。 
    步骤1:重建清华大学出版社的图书视图,带WITH CHECK OPTION选项: 
    Sql代码  收藏代码
    1. CREATE OR REPLACE VIEW 清华图书   
    2.         AS SELECT * FROM 图书 WHERE 出版社编号= '01'  
    3.         WITH CHECK OPTION;  

    执行结果: 
    视图已建立。 
    步骤2:插入新图书: 
    Sql代码  收藏代码
    1. INSERT INTO 清华图书 VALUES('A0006','Oracle数据库','02','黄河',3,39.8);  

    执行结果: 
    ERROR 位于第 1 行: 
    ORA-01402: 视图 WITH CHECK OPTIDN 违反 where 子句 
    说明:可见通过设置了WITH CHECK OPTION选项,“02”出版社的图书插入受到了限制。如果修改已有图书的出版社编号情况会如何?答案是将同样受到限制。要是删除视图中已有图书,结果又将怎样呢?答案是可以,因为删除并不违反WHERE条件。 
    3.来自基表的限制 
    除了以上的限制,基表本身的限制和约束也必须要考虑。如果生成子查询的语句是一个分组查询,或查询中出现计算列,这时显然不能对表进行插入。另外,主键和NOT NULL列如果没有出现在视图的子查询中,也不能对视图进行插入。在视图中插入的数据,也必须满足基表的约束条件。 
    基表本身限制视图的插入。 
    步骤1:重建图书价格视图: 
    Sql代码  收藏代码
    1. CREATE OR REPLACE VIEW 图书价格   
    2.         AS SELECT 图书名称,单价 FROM 图书;  

    执行结果: 
    视图已建立。 
    步骤2:插入新图书: 
    Sql代码  收藏代码
    1. INSERT INTO 图书价格 VALUES('Oracle数据库',39.8);  

    执行结果: 
    ERROR 位于第 1 行: 
    ORA-01400: 无法将 NULL 插入 ("SCOTT"."图书"."图书编号") 
    说明:在视图中没有出现的基表的列,在对视图插入时,自动默认为NULL。该视图只有两列可以插入,其他列将默认为空。插入出错的原因是,在视图中不能插入图书编号,而图书编号是图书表的主键,是必须插入的列,不能为空,这就产生了矛盾。 
    视图的查看 
    USER_VIEWS字典中包含了视图的定义。 
    USER_UPDATABLE_COLUMNS字典包含了哪些列可以更新、插入、删除。 
    USER_OBJECTS字典中包含了用户的对象。 
    可以通过DESCRIBE命令查看字典的其他列信息。在这里给出一个训练例子。 
    查看清华图书视图的定义: 
    Sql代码  收藏代码
    1. SELECT TEXT FROM USER_VIEWS WHERE VIEW_NAME='清华图书';  

    执行结果: 
    Sql代码  收藏代码
    1. TEXT  
    2.         -----------------------------------------------------------------------------------------------  
    3.         SELECT 图书名称,作者,单价 FROM 图书 WHERE 出版社编号='01'   

    查看用户拥有的视图: 
    Sql代码  收藏代码
    1. SELECT object_name FROM user_objects WHERE object_type='VIEW';  

    执行结果: 
    Sql代码  收藏代码
    1. OBJECT_NAME  
    2.         ----------------------------------------------------------------------------------------------  
    3.         清华图书  
    4.         图书作者  


    黑色头发:http://heisetoufa.iteye.com/
    展开全文
  • 视图的概念 视图是基于一张表或多张表或另外一个视图的逻辑表。视图不同于表,视图本身不包含任何数据。表是实际独立存在的实体,是用于存储数据的基本结构。而视图只 是一种定义,对应一个查询语句。视图的数据都...

    转载:http://heisetoufa.iteye.com/blog/364864

    视图的概念
      视图是基于一张表或多张表或另外一个视图的逻辑表。视图不同于表,视图本身不包含任何数据。表是实际独立存在的实体,是用于存储数据的基本结构。而视图只 是一种定义,对应一个查询语句。视图的数据都来自于某些表,这些表被称为基表。通过视图来查看表,就像是从不同的角度来观察一个(或多个)表。
    视图有如下一些优点:
    * 可以提高数据访问的安全性,通过视图往往只可以访问数据库中表的特定部分,限制了用户访问表的全部行和列。
    * 简化了对数据的查询,隐藏了查询的复杂性。视图的数据来自一个复杂的查询,用户对视图的检索却很简单。
    * 一个视图可以检索多张表的数据,因此用户通过访问一个视图,可完成对多个表的访问。
    * 视图是相同数据的不同表示,通过为不同的用户创建同一个表的不同视图,使用户可分别访问同一个表的不同部分。
    视图可以在表能够使用的任何地方使用,但在对视图的操作上同表相比有些限制,特别是插入和修改操作。对视图的操作将传递到基表,所以在表上定义的约束条件和触发器在视图上将同样起作用。

    视图的创建
    创建视图需要CREAE VIEW系统权限,视图的创建语法如下:
    CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW 视图名[(别名1[,别名2...])]
    AS 子查询
    [WITH CHECK OPTION [CONSTRAINT 约束名]]
    [WITH READ ONLY]
    其中:
    OR REPLACE 表示替代已经存在的视图。
    FORCE表示不管基表是否存在,创建视图。
    NOFORCE表示只有基表存在时,才创建视图,是默认值。
    别名是为子查询中选中的列新定义的名字,替代查询表中原有的列名。
    子查询是一个用于定义视图的SELECT查询语句,可以包含连接、分组及子查询。
    WITH CHECK OPTION表示进行视图插入或修改时必须满足子查询的约束条件。后面的约束名是该约束条件的名字。
    WITH READ ONLY 表示视图是只读的。
    删除视图的语法如下:
    DROP VIEW 视图名;
    删除视图者需要是视图的建立者或者拥有DROP ANY VIEW权限。视图的删除不影响基表,不会丢失数据。
    1.创建简单视图 
    创建图书作者视图。
    步骤1:创建图书作者视图:

    Sql代码  收藏代码
    1. CREATE VIEW 图书作者(书名,作者)   
    2.         AS SELECT 图书名称,作者 FROM 图书;  


    输出结果:
    视图已建立。
    步骤2:查询视图全部内容

    Sql代码  收藏代码
    1. SELECT * FROM 图书作者;  


    输出结果:

    Sql代码  收藏代码
    1. 书名                           作者  
    2.         -------------------------------- --------------------  
    3.         计算机原理                     刘勇  
    4.          C语言程序设计                马丽  
    5.         汇编语言程序设计               黄海明  


    步骤3:查询部分视图:

    Sql代码  收藏代码
    1. SELECT 作者 FROM 图书作者;  


    输出结果:

    Sql代码  收藏代码
    1. 作者  
    2.         ----------  
    3.         刘勇  
    4.         马丽  
    5.         黄海明  


    说明:本训练创建的视图名称为“图书作者”,视图只包含两列,为“书名”和“作者”,对应图书表的“图书名称”和“作者”两列。如果省略了视图名 称后面的列名,则视图会采用和表一样的列名。对视图查询和对表查询一样,但通过视图最多只能看到表的两列,可见视图隐藏了表的部分内容。
    创建清华大学出版社的图书视图。
    步骤1:创建清华大学出版社的图书视图:

    Sql代码  收藏代码
    1. CREATE VIEW 清华图书   


    AS SELECT 图书名称,作者,单价 FROM 图书 WHERE 出版社编号= '01';
    执行结果:
    视图已建立。
    步骤2:查询图书视图:

    Sql代码  收藏代码
    1. SELECT * FROM 清华图书;  


    执行结果:

    Sql代码  收藏代码
    1. 图书名称                       作者             单价  
    2. -------------------------------------------- ---------- -----------------------  
    3.         计算机原理                     刘勇             25.3  


    步骤3:删除视图:

    Sql代码  收藏代码
    1. DROP VIEW 清华图书;  


    执行结果:
    视图已丢掉。 
    说明:该视图包含了对记录的约束条件。
    2.创建复杂视图
    修改作者视图,加入出版社名称。
    步骤1:重建图书作者视图:

    Sql代码  收藏代码
    1. CREATE OR REPLACE VIEW 图书作者(书名,作者,出版社)   
    2.         AS SELECT 图书名称,作者,出版社名称 FROM 图书,出版社   
    3.         WHERE 图书.出版社编号=出版社.编号;  


    输出结果:
    视图已建立。
    步骤2:查询新视图内容:

    Sql代码  收藏代码
    1. SELECT * FROM 图书作者;  


    输出结果:

    Sql代码  收藏代码
    1. 书名                           作者       出版社  
    2.         -------------------------------------------- ---------- ----------------------------  
    3.         计算机原理               刘勇       清华大学出版社  
    4.         C语言程序设计         马丽       电子科技大学出版社  
    5.         汇编语言程序设计     黄海明     电子科技大学出版社  


    说明:本训练中,使用了OR REPLACE选项,使新的视图替代了同名的原有视图,同时在查询中使用了相等连接,使得视图的列来自于两个不同的基表。
    创建一个统计视图。
    步骤1:创建emp表的一个统计视图:

    Sql代码  收藏代码
    1. CREATE VIEW 统计表(部门名,最大工资,最小工资,平均工资)  
    2.         AS SELECT DNAME,MAX(SAL),MIN(SAL),AVG(SAL) FROM EMP E,DEPT D  
    3.         WHERE E.DEPTNO=D.DEPTNO GROUP BY DNAME;  


    执行结果:
    视图已建立。
    步骤2:查询统计表:

    Sql代码  收藏代码
    1. SELECT * FROM 统计表;  


    执行结果:

    Sql代码  收藏代码
    1. 部门名       最大工资    最小工资    平均工资  
    2.         -------------------------- --------------- ----------------- ------------------  
    3.         ACCOUNTING          5000       1300        3050  
    4.         RESEARCH             3000        800        2175  
    5.         SALES                  2850        950   1566.66667  


    说明:本训练中,使用了分组查询和连接查询作为视图的子查询,每次查询该视图都可以得到统计结果。
    创建只读视图
    创建只读视图要用WITH READ ONLY选项。
    创建只读视图。
    步骤1:创建emp表的经理视图:

    Sql代码  收藏代码
    1. CREATE OR REPLACE VIEW manager   
    2.         AS SELECT * FROM emp WHERE job= 'MANAGER'  
    3.         WITH READ ONLY;  


    执行结果:
    视图已建立。
    步骤2:进行删除:

    Sql代码  收藏代码
    1. DELETE FROM manager;  


    执行结果:
    ERROR 位于第 1 行:
    ORA-01752: 不能从没有一个键值保存表的视图中删除
    4.创建基表不存在的视图
    正常情况下,不能创建错误的视图,特别是当基表还不存在时。但使用FORCE选项就可以在创建基表前先创建视图。创建的视图是无效视图,当访问无效视图时,Oracle将重新编译无效的视图。
    使用FORCE选项创建带有错误的视图:

    Sql代码  收藏代码
    1. CREATE FORCE VIEW 班干部 AS SELECT * FROM 班级 WHERE 职务 IS NOT NULL;  


    执行结果:
    警告: 创建的视图带有编译错误。
    视图的操作
    对视图经常进行的操作是查询操作,但也可以在一定条件下对视图进行插入、删除和修改操作。对视图的这些操作最终传递到基表。但是对视图的操作有很多限定。如果视图设置了只读,则对视图只能进行查询,不能进行修改操作。
    1.视图的插入 
    视图插入练习。
    步骤1:创建清华大学出版社的图书视图:

    Sql代码  收藏代码
    1. CREATE OR REPLACE VIEW 清华图书   
    2.         AS SELECT * FROM 图书 WHERE 出版社编号= '01';  


    执行结果:
    视图已建立。
    步骤2:插入新图书:

    Sql代码  收藏代码
    1. INSERT INTO 清华图书 VALUES('A0005','软件工程','01','冯娟',5,27.3);  


    执行结果:
    已创建 1 行。
    步骤3:显示视图:

    Sql代码  收藏代码
    1. SELECT * FROM 清华图书;  


    执行结果:

    Sql代码  收藏代码
    1. 图书  图书名称                       出 作者             数量       单价  
    2.         -------- ---------------------------------------- ----------- -------- ------------------------ --------------  
    3.         A0001 计算机原理                     01 刘勇                5       25.3  
    4. A0005 软件工程                       01 冯娟                5       27.3  


    步骤4:显示基表

    Sql代码  收藏代码
    1. SELECT * FROM 图书;  


    执行结果:

    Sql代码  收藏代码
    1. 图书  图书名称         出 作者       数量       单价  
    2.         -------- ------------------------------------------ ------- ---------------- ----------------- ---------------  
    3.         A0001 计算机原理           01 刘勇        5        25.3  
    4.         A0002  C语言程序设计        02 马丽    1       18.75  
    5.         A0003 汇编语言程序设计     02 黄海明       15       20.18  
    6.         A0005 软件工程              01 冯娟        5        27.3  


    说明:通过查看视图,可见新图书插入到了视图中。通过查看基表,看到该图书也出现在基表中,说明成功地进行了插入。新图书的出版社编号为“01”,仍然属于“清华大学出版社”。
    但是有一个问题,就是如果在“清华图书”的视图中插入其他出版社的图书,结果会怎么样呢?结果是允许插入,但是在视图中看不见,在基表中可以看见,这显然是不合理的。
    2.使用WITH CHECK OPTION选项
    为了避免上述情况的发生,可以使用WITH CHECK OPTION选项。使用该选项,可以对视图的插入或更新进行限制,即该数据必须满足视图定义中的子查询中的WHERE条件,否则不允许插入或更新。比如 “清华图书”视图的WHERE条件是出版社编号要等于“01”(01是清华大学出版社的编号),所以如果设置了WITH CHECK OPTION选项,那么只有出版社编号为“01”的图书才能通过清华视图进行插入。
    使用WITH CHECK OPTION选项限制视图的插入。
    步骤1:重建清华大学出版社的图书视图,带WITH CHECK OPTION选项:

    Sql代码  收藏代码
    1. CREATE OR REPLACE VIEW 清华图书   
    2.         AS SELECT * FROM 图书 WHERE 出版社编号= '01'  
    3.         WITH CHECK OPTION;  


    执行结果:
    视图已建立。
    步骤2:插入新图书:

    Sql代码  收藏代码
    1. INSERT INTO 清华图书 VALUES('A0006','Oracle数据库','02','黄河',3,39.8);  


    执行结果:
    ERROR 位于第 1 行:
    ORA-01402: 视图 WITH CHECK OPTIDN 违反 where 子句
    说明:可见通过设置了WITH CHECK OPTION选项,“02”出版社的图书插入受到了限制。如果修改已有图书的出版社编号情况会如何?答案是将同样受到限制。要是删除视图中已有图书,结果又将怎样呢?答案是可以,因为删除并不违反WHERE条件。
    3.来自基表的限制
    除了以上的限制,基表本身的限制和约束也必须要考虑。如果生成子查询的语句是一个分组查询,或查询中出现计算列,这时显然不能对表进行插入。另外,主键和 NOT NULL列如果没有出现在视图的子查询中,也不能对视图进行插入。在视图中插入的数据,也必须满足基表的约束条件。
    基表本身限制视图的插入。
    步骤1:重建图书价格视图:

    Sql代码  收藏代码
    1. CREATE OR REPLACE VIEW 图书价格   
    2.         AS SELECT 图书名称,单价 FROM 图书;  


    执行结果:
    视图已建立。
    步骤2:插入新图书:

    Sql代码  收藏代码
    1. INSERT INTO 图书价格 VALUES('Oracle数据库',39.8);  


    执行结果:
    ERROR 位于第 1 行:
    ORA-01400: 无法将 NULL 插入 ("SCOTT"."图书"."图书编号")
    说明:在视图中没有出现的基表的列,在对视图插入时,自动默认为NULL。该视图只有两列可以插入,其他列将默认为空。插入出错的原因是,在视图中不能插入图书编号,而图书编号是图书表的主键,是必须插入的列,不能为空,这就产生了矛盾。
    视图的查看
    USER_VIEWS字典中包含了视图的定义。
    USER_UPDATABLE_COLUMNS字典包含了哪些列可以更新、插入、删除。
    USER_OBJECTS字典中包含了用户的对象。
    可以通过DESCRIBE命令查看字典的其他列信息。在这里给出一个训练例子。
    查看清华图书视图的定义:

    Sql代码  收藏代码
    1. SELECT TEXT FROM USER_VIEWS WHERE VIEW_NAME='清华图书';  


    执行结果:

    Sql代码  收藏代码
    1. TEXT  
    2.         -----------------------------------------------------------------------------------------------  
    3.         SELECT 图书名称,作者,单价 FROM 图书 WHERE 出版社编号='01'   


    查看用户拥有的视图:

    Sql代码  收藏代码
    1. SELECT object_name FROM user_objects WHERE object_type='VIEW';  


    执行结果:

    Sql代码  收藏代码
    1. OBJECT_NAME  
    2.         ----------------------------------------------------------------------------------------------  
    3.         清华图书  
    4.         图书作者  

     

    展开全文
  • 注意:视图不存在数据,算是个虚表,视图只会访问基表行 适用于:检查检索数据 优点: 限制用户只能通过视图检索数据,使用户看不到底层基表 将复杂查询编写为视图,降低sql复杂性 限制用户只能访问基...
  • 通俗理解就是临时表,行和列的数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的,只保存sql逻辑,不保存查询结果。 应用场景 多个地方用到同样的查询结果,该查询结果使用的sql语句较复杂。举例????...
  • SQLserver查看某个视图的创建语句

    千次阅读 2018-07-17 15:35:00
    1.已经创建视图,查看视图创建源码 sp_helptext '视图名' 如下: sp_helptext 'V_user'  方式2: sa账户登录SQLserver,选择视图---右键----编写视图脚本为-----ALTER到----剪贴板 粘贴即可 ...
  • 虚拟表的结构来源不是自己定义的,而是从对应的基表中产生(视图的数据来源) 注:虚拟表的数据也不是从自己来的 二、创建视图 1、基本语法 -- 创建视图 -- select语句:可以是 普通查询|连接查询|联合查询|...
  • 所以我们在创建视图的时候,主要的工作就落在创建这条SQL查询语句上。 视图相对于普通的表的优势主要包括以下几项。 简单:使用视图的用户完全不需要关心后面对应的表的结构、关联条件和筛选条件,对用户来说已经...
  • 以声明方式创建视图层次结构。 快速查看view.pd.add(imageView.pd.image(logoImage),label.pd.text(“ Logo”)。textColor(.red).font(size:20),button.pd.title(“ Go” ).action(buttonTapped))...
  • oracle 视图 创建 操作 简单 复杂 基表 不存在 增 删 改 插入 修改 删除 查看 结构视图的概念   视图是基于一张表或多张表或另外一个视图的逻辑表。视图不同于表,视图本身不包含任何数据。表是实际...
  • MySQL视图-(视图创建,修改,删除,查看,更新数据) 视图是一种虚拟存在的表,对于使用视图的用户来说基本上是透明的。视图并不在数据库中实际存在,行和列数据来自定义视图的查询总使用的表,并且是在使用视图时...
  • 视图简介: 视图可以看作定义在SQL Server上的虚拟表。视图正如其名字的含义一样,是另一种查看数据的入口。 常规视图本身并不存储实际的...视图的作用: 1、视图隐藏了底层的表结构,简化了数据访问操作,客户端.
  • 一、视图的基本使用 1)创建视图: ...2)查看视图: 查看当前库下所有表的状态信息 show table status; show table status where ccomment=“view”\G; 查看创建视图具体命令: show create vi...
  • 如图所示,天猫、京东,以及目前国内一线电商平台,大多都是以这种结构作为首页上方分类导航界面,将树状分类导航与轮播图镶嵌在一起,这样从网页设计角度上来讲,可以用最少空间呈现最多数据信息 ...
  • USER_*: 是关于用户所拥有对象信息,换句话说是用户自己创建的对象信息。ALL_*: 是关于用户可以访问对象信息,用公式来说就是:用户自己创建的信息+用户可以访问对象信息。DBA_*: 是关于整个...
  • 下面我们就来简单介绍视图的基本概念及Oracle视图的创建。 视图的概念 视图是基于一张表或多张表或另外一个视图的逻辑表。视图不同于表,视图本身不包含任何数据。表是实际独立存在的实体,是用于存储数据的...
  • 视图簇View cluster的创建 一、视图簇简介 在ERP系统中我们经常会看到带层次结构的维护视图,尤其是在后台IMG配置中,如事务代码OKKP。其实它就是一个视图簇(View cluster),视图簇可以通过事务代码SE54将多个表...
  • 修改视图 方式一:当视图不存在时则创建,视图存在则修改视图结构 ...这里的查看视图是查看视图的详细信息和查询逻辑,并不是查看数据的结果集 方式一:DESC 视图名 方式二:SHOW CREATE VIEW 视图名 ...
  • mysql中的视图

    2021-05-27 19:04:08
    文章目录mysql中视图创建视图并查看视图数据查看视图结构插入数据到视图中更新视图中数据删除视图中数据删除视图 mysql中视图 创建视图并查看视图数据 #创建视图 create view 视图名 as sql查询语句...
  • 视图

    2021-04-26 21:08:59
    文章目录视图视图的创建某些视图不能更新视图逻辑的更新视图的删除视图结构查看 视图 含义:理解成一张虚拟的表 视图和表的区别: 使用方式 占用物理空间 视图 完全相同 不占用,仅仅保存的是sql逻辑 表 完全...
  • 创建视图的原因有两个:一是出于安全考虑,用户不必看到整个数据库结构,而隐藏部分数据;二是符合用户日常业务逻辑,使其对数据更容易理解什么是视图? 视图是另一种查看数据库中一个或多个表中数据的方法。视图是...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 977
精华内容 390
关键字:

查看视图的创建结构