创建和使用视图

视图可用于访问一个或多个表或视图中的数据。 您可以使用 SELECT 语句来创建视图。

例如,创建仅选择所有经理的姓氏和部门的视图:

     CREATE VIEW CORPDATA.EMP_MANAGERS FOR SYSTEM NAME EMPMANAGER AS
        SELECT LASTNAME, WORKDEPT FROM CORPDATA.EMPLOYEE
        WHERE JOB = 'MANAGER';
由于视图名称 EMP_MANAGER 对于系统对象名太长,因此可以使用 FOR SYSTEM NAME 子句来提供系统名称。 如果不添加此子句,那么将为系统对象生成类似 EMP_M00001 的名称。

创建视图后,可以像表一样在 SQL 语句中使用该视图。 您还可以通过视图更改基本表中的数据。 以下 SELECT 语句显示 EMP_MANAGER 的内容:

     SELECT *
           FROM CORPDATA.EMP_MANAGERS;

结果如下。

LASTNAME WORKDEPT
THOMPSON B01
KWAN C01
GEYER E01
STERN D11
PULASKI D21
HENDERSON E11
SPENSER E21

如果选择列表包含除列 (例如,表达式,函数,常量或专用寄存器) 以外的元素,并且未使用 AS 子句来命名这些列,那么必须为视图指定列列表。 在以下示例中,视图的列为 LASTNAME 和 YEARSOFSERVICE。

     CREATE VIEW CORPDATA.EMP_YEARSOFSERVICE
         (LASTNAME, YEARSOFSERVICE) AS
        SELECT LASTNAME, YEAR (CURRENT DATE - HIREDATE)
        FROM CORPDATA.EMPLOYEE;

由于查询此视图的结果会随着当前年份的更改而更改,因此此处不包含这些结果。

您还可以使用选择列表中的 AS 子句来对视图中的列进行命名,从而定义先前的视图。 例如:

    CREATE VIEW CORPDATA.EMP_YEARSOFSERVICE AS
        SELECT LASTNAME,
                YEARS (CURRENT_DATE - HIREDATE) AS YEARSOFSERVICE
        FROM CORPDATA.EMPLOYEE;

通过使用 UNION 关键字,可以组合两个或多个子查询以形成单个视图。 例如:

CREATE VIEW D11_EMPS_PROJECTS AS
  (SELECT EMPNO
     FROM CORPDATA.EMPLOYEE
     WHERE WORKDEPT = 'D11'
   UNION
   SELECT EMPNO
     FROM CORPDATA.EMPPROJACT
     WHERE PROJNO = 'MA2112' OR
        PROJNO = 'MA2113' OR
        PROJNO = 'AD3111');

此视图具有以下数据。

表 1. 将视图创建为 UNION 的结果
EMPNO
000060
000150
000160
000170
000180
000190
000200
000210
000220
000230
000240
200170
200220

视图是在运行 CREATE VIEW 语句时使用有效的排序顺序创建的。 排序顺序适用于 CREATE VIEW 语句子查询中的所有字符, UCS-2 或 UTF-16 图形比较。

您还可以使用 WITH CHECK OPTION 子句来创建视图,以指定通过视图插入或更新数据时的检查级别。