Oracle中数据库对象视图怎么用
admin
2023-04-24 16:42:22
0

-  常见的数据库对象:

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

1、Oracle的视图介绍和创建

a、什么是视图?

  • 视图是一个虚拟的表,视图建立在已有表的基本上,视图赖以建立的这些表称之为基表。

  • 向视图提供数据内容的语句称之为SELECT语句。

    b、为什么要使用视图?

  • 主要出于两个原因:

  • 1、安全原因,限制数据访问;2、视图可使复杂的查询易于理解和使用。

    c、视图的分类

  • 视图分为简单视图、复杂视图、连接视图、只读视图:
    1、简单视图只从单表里获取数据;不包含函数和数据组。
    2、复杂视图从多表获取数据;包含函数和数据组。
    3、连接视图是指基于多个表建立的视图,使用连接视图能够简化连接查询。
    4、只读视图只允许使用select语句,不允许其他DML语句的操作。

  • 附加说明:DML(data manipulation language):它们是SELECT、UPDATE、INSERT、DELETE,就象它的名字一样,这4条命令是用来对数据库里的数据进行操作的语言。

    d、如何创建视图?

  • 创建视图的语法格式:CREATE [OR REPLACE] VIEW view [(alias[, alias]...)] AS subquery [WITH CHECK OPTION [ CONSTRAINT constraint]] [WITH READ ONLY];

  • 需要注意的是,Oracle数据库用户必须具有CREATRE VIEW权限才能够创建视图。

  • 简单视图的创建示例:

  • 建立用于查询员工号、姓名、工资的视图。

    SQL> conn sys/02000059 as sysdba;
    已连接。
    SQL> grant create view to scott;
    授权成功。
    SQL> conn scott/02000059
    已连接。
    SQL> create VIEW emp_view AS select empno, ename, sal FROM emp;
    视图已创建。
    • 视图是一张虚拟的表,和表一样,可以通过SELECT语句进行查询。

      SQL> select * from emp_view;
               EMPNO ENAME             SAL
                  7951 EASON            3000
                  7369 G_EASON           800
                  7499 ALLEN            1600
                  ......
                  7900 JAMES             950
                  7902 FORD             3000
                  7934 MILLER           1300
      已选择15行。
  • 在创建视图时可以修改列的名称。

        SQL> create VIEW emp_view2(员工号, 员工名,工资) AS select empno, ename, sal FROM emp;
        视图已创建。
        SQL> select * from emp_view2;
                员工号 员工名           工资
                    7951 EASON            3000
                    7369 G_EASON           800
                    7499 ALLEN            1600
                    7521 WARD             1250
                    ......
                    7876 ADAMS            1100
                    7900 JAMES             950
                    7902 FORD             3000
                    7934 MILLER           1300
        已选择15行。

  • 创建连接视图示例:

  • 建立用于获取部门号为10的部门号、部门名称以及员工信息。

    SQL> CREATE VIEW dept_emp_view AS SELECT d.deptno, d.dname, e.empno, e.ename, e.job FROM dept d, emp e WHERE d.deptno = e.deptno AND d.deptno = 10;
    视图已创建。
        SQL> select * from dept_emp_view;
                        DEPTNO DNAME           EMPNO ENAME      JOB
                        10 ACCOUNTING           7782 CLARK      MANAGER
                        10 ACCOUNTING           7839 KING       PRESIDENT
                        10 ACCOUNTING           7934 MILLER     CLERK

  • 只读视图示例:建立查看10号部门员工信息的视图。

    SQL> CREATE VIEW emp_view3 AS select * from emp where deptno = 10 with read only;
    视图已创建。
    SQL> update emp_view3 set sal = sal + 50;
    update emp_view3 set sal = sal + 50
    第 1 行出现错误:
    ORA-42399: 无法对只读视图执行 DML 操作

    2、Oracle视图的查询修改与删除

    a、视图上的DML操作

  • 查询视图-select,如:select * from emp_view;

  • 添加数据-insert,如:insert into empnew_view(empno, ename, sal) values(8888, 'LAYNA', 6666);

  • 修改数据-update,如:update emp_view set sal = sal + 100 where empno = 8888;

  • 删除数据-delete,如:delete from emp_view where empno = 8888;

  • 注意:针对视图的更新操作(insert、update、delete)实际上改变的是基表中的数据。

    b、在创建视图时定义check约束

  • WITH CHECK OPTION选项用于在视图上定义CHECK约束

  • 示例:CHREATE VIEW emp_view4 AS SELECT * FROM emp_view WHERE deptno = 20 WITH CHECK OPTION chk_view;

    SQL> create view dept_emp_view2 as select * from dept_emp_view where deptno = 10 with check option constraint ck_view;
    视图已创建。
    SQL> select * from dept_emp_view2;
            DEPTNO DNAME               EMPNO ENAME      JOB
                    10 ACCOUNTING           7782 CLARK      MANAGER
                    10 ACCOUNTING           7839 KING       PRESIDENT
                    10 ACCOUNTING           7934 MILLER     CLERK
    SQL> update dept_emp_view set deptno = 20 where empno = 7782;
    update dept_emp_view set deptno = 20 where empno = 7782
    第 1 行出现错误:
    ORA-01779: 无法修改与非键值保存表对应的列
  • check约束的作用是在添加或者修改数据时数据必须满足with check option前的where子句的条件。如上例:修改和添加数据时deptno 的值必须为10。

    c、修改视图

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

  • 示例:CREATE OR REPLACE VIEW emp_view AS SELECT * FROM emp WHERE job = 'SALESMAN';

    SQL> CREATE OR REPLACE VIEW emp_view AS SELECT * FROM emp WHERE job = 'SALESMAN';
    视图已创建。

    d、删除视图

  • 当视图不再需要时,用户可以执行DROP view语句删除视图。(不会删除基表)

    SQL> DROP VIEW emp_view;
    视图已删除。
    SQL> select * from emp_view;
    select * from emp_view
    第 1 行出现错误:
    ORA-00942: 表或视图不存在

    3、Oracle的复杂视图

    a、什么是复杂视图?

  • 复杂视图是指包含函数、表达式或者分组数据的视图,它主要用于执行查询操作。

  • 注意:当定义复杂视图时,必须要为函数或者表达式定义列的别名。

    b、创建复杂视图

  • 示例:创建用于获得每个岗位平均工资、工资总和、最高工资和最低工资的视图。

    SQL> create VIEW job_view(job, avgsal, sumsal, maxsal, minsal) AS SELECT job, avg(sal), sum(sal), max(sal), min(sal) FROM emp GROUP BY job;
    视图已创建。
    SQL> select * from job_view;
    JOB           AVGSAL     SUMSAL     MAXSAL     MINSAL
    CLERK         1037.5       4150       1300        800
    SALESMAN        1400       5600       1600       1250
    PRESIDENT       5000       5000       5000       5000
    MANAGER   2758.33333       8275       2975       2450
    ANALYST         3000       9000       3000       3000

    c、复杂视图上执行DML操作的原则

  • DELETE操作原则,视图中包含以下元素之一不能执行delete操作:

  • group by子句、分组函数、distinct关键字、rownum伪列。

  • UPDATE操作原则,视图中包含以下元素之一不能执行update操作:

  • group by子句、分组函数、dinstinct关键字、rownum伪列、使用表达式定义的列。

  • INSERT操作原则,视图中包含以下元素之一不能执行insert操作:

  • group by子句、分组函数、dinstinct关键字、rownum伪列、使用表达式定义的列、视图上没有包含基表的NOT NULL列。

相关内容

热门资讯

烈焰熊熊,堪比“原子弹”,欧洲... 据美国有线电视新闻网(CNN)7月29日报道,席卷法国西南部的大片野火燃烧得如此猛烈,以至于形成了一...
外交部:对日本熊本县地震遇难者... 据凤凰卫视报道,针对日本熊本县发生强震造成人员伤亡,中国外交部发言人毛宁7月29日在例行记者会上表示...
高铁喧哗被劝阻后叫嚣全家体制内... “女子高铁喧哗被劝阻后叫嚣全家体制内”一事迎来官方通报。据新京报报道,7月29日,辽宁北票市公安局发...
广东专业蓝牙耳机定制厂家推荐,... 在珠三角腹地,广东早已成为全球蓝牙耳机产业链的“心脏地带”。从深圳华强北的声学元件批发,到东莞、惠州...
格雷厄姆葬礼变地缘竞价场!两大... 有些葬礼,送别的是逝者;有些葬礼,演的却是活人最现实的政治博弈。当地时间7月28日,美国老牌鹰派参议...
一道小学数学题难住3名医学博士... 3名不同学校的博士同做一道数学题,谁最厉害?近日,一陕西网友发布的视频引发热议。29日,视频发布者“...
华为全新“小艺任务”亮相:整合... 7月29日,在华为鸿蒙电脑新品技术沟通会上,终端云服务小艺业务部总裁贾永利宣布,小艺将迎来“从对话到...
广西日报特稿《王的猜想》火了,... 澎湃新闻记者 蒋子文 实习生 汤煜炜为应对外界购买纸质版特稿《王的猜想》的热情,《广西日报》宣布紧急...
月租20元内!2026年平价云... 不少手游玩家、账号运营从业者挑选云手机时,首要诉求就是低价够用,想要控制每月支出在20元以内,同时兼...
诺奖得主如何看待王虹境遇?“我... 中村修二(2014年诺贝尔物理学奖得主)【导读】近日王虹与邓煜双双获得2026年菲尔兹奖,成为了首批...