oracle中视图的使用

    xiaoxiao2022-07-12  186

    一、视图的定义

          视图是从一个或几个基本表(或视图)导出的表。它与基本表不同,是一个虚表。数据库只存放视图的定义,而不存放视图对应的数据,这些数据仍存放在原来的基本表中。所以基本表中的数据发生变化,从视图中查询出的数据也就随之改变了。从这个意义上讲,视图就像一个窗口,透过它可以看到数据库中自己感兴趣的数据及其变化。

    二、视图的作用

         在不依赖数据库基表的前提下,将需要的数据通过多个数据库基表联合查询后,得到目标数据集合,创建虚拟表。

    三、视图的使用

    视图基本语法:

    CREATE[OR REPLACE][FORCE][NOFORCE]VIEW view_name

    [(column_name)[,….n]]

    AS

    [子查询]

    [WITH CHECK OPTION[CONSTRAINT constraint_name]]

    [WITH READ ONLY]

    说明:

    view_name :  视图的名字

    column_name: 视图中的列名  

    REPLACE:  如果创建视图时, 已经存在此视图, 则重新创建此视图, 相当于覆盖

    FORCE:  强制创建视图, 无论的视图所依赖的基表否存在或是否有权限创建

    NOFORCE:  只有基表存在且具有创建视图权限时, 才可以创建视图

    WITH CHECK OPTION  指出在视图上所进行的修改都要符合子查询所指定的限制条件

    WITH READ ONLY  只允许查看视图 四、视图查询实列

    create or replace view t_push_mptarget_smarttg as --app推送 select f.* from (select tg.eht as push_target, t.serial_number, t.channel_key from tetg_ywgx tg left join t_push_mp_smarttg_bj t on tg.dyid_fid = t.serial_number where tg.zt = '0' and to_date(tg.jsrq, 'yyyymmdd') >= to_date(sysdate, 'yyyymmdd') and tg.ywlx = '9' and tg.gxlx = '2' and t.channel_key = 'huacai_app_push' ) f left join (select tg.eht as push_target, t.serial_number, t.channel_key from (select a.eht, a.dyid_fid from tetg_ywgx a left join t_adviser_short_push b on a.eht = b.eno where (b.plant_cycle_notice = '0' or b.remind_notice = '0') and a.zt = '0' and to_date(a.jsrq, 'yyyymmdd') >= to_date(sysdate, 'yyyymmdd') and a.ywlx = '9' and a.gxlx = '2') tg left join t_push_mp_smarttg_bj t on tg.dyid_fid = t.serial_number where t.serial_number = '314' and t.super_bztype_key = '1001' and t.channel_key = 'huacai_app_push' ) d on f.push_target = d.push_target where d.push_target is null union --短信推送 select f.* from (select tg.sj as push_target, t.serial_number, t.channel_key from tetg_ywgx tg left join t_push_mp_smarttg_bj t on tg.dyid_fid = t.serial_number where tg.zt = '0' and to_date(tg.jsrq, 'yyyymmdd') >= to_date(sysdate, 'yyyymmdd') and tg.ywlx = '9' and tg.gxlx = '2' and t.channel_key = 'sms01' ) f left join (select tg.sj as push_target, t.serial_number, t.channel_key from (select a.eht,a.sj, a.dyid_fid from tetg_ywgx a left join t_adviser_short_push b on a.eht = b.eno where (b.plant_cycle_sms = '0' or b.remind_sms = '0') and a.zt = '0' and to_date(a.jsrq, 'yyyymmdd') >= to_date(sysdate, 'yyyymmdd') and a.ywlx = '9' and a.gxlx = '2') tg left join t_push_mp_smarttg_bj t on tg.dyid_fid = t.serial_number where t.serial_number = '314' and t.super_bztype_key = '1001' and t.channel_key = 'sms01' ) d on f.push_target = d.push_target where d.push_target is null with read only;

    上面实列是初版,因为公司原因,不能放最终版本,见谅

    最新回复(0)