创建和使用视图
视图可用于访问一个或多个表或视图中的数据。 您可以使用 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');
此视图具有以下数据。
| 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 子句来创建视图,以指定通过视图插入或更新数据时的检查级别。