在
column 列表中指定的列的数目必须匹配由定义视图的 SELECT 语句返回的列的数目。如果不指定列的列表,则视图继承底层表的列名称。在下面的示例中,视图
herostock 拥有的列名称与 SELECT 语句的 Projection
子句中的列名称相同:
CREATE VIEW herostock AS
SELECT stock_num, description, unit_price, unit, unit_descr
FROM stock WHERE manu_code = 'HRO';
在以下环境中必须指定至少一个列名:
- 如果为视图中的一些列提供名称,那么必须为所有的列提供名称。即列列表必须针对视图中出现的每个列包含一个相应的条目。
- 如果 SELECT 语句返回一个表达式,则视图中相应的列称为虚拟列。必须为虚拟列提供名称。在下面的示例中,用户必须指定列参数,因为 SELECT 语句的
Projection
子句的选择列表包含一个聚集表达式:
CREATE VIEW newview (firstcol, secondcol) AS
SELECT sum(cola), colb FROM oldtab;
- 您还必须指定列名称,以防选择的列含有不带表限定符的重复的列名称。例如,如果 orders.order_num 和 items.order_num
都出现在 SELECT 语句中,则 CREATE VIEW 语句必须提供两个分开的列名以标记它们:
CREATE VIEW someorders (custnum,ocustnum,newprice) AS
SELECT orders.order_num,items.order_num,
items.total_price*1.5
FROM orders, items
WHERE orders.order_num = items.order_num
AND items.total_price > 100.00;
此处 custnum 和 ocustnum 替换两个相同的列名称。
- 当 SELECT 语句包括 UNION 或 UNION ALL 操作符并且 SELECT 语句中相应列的名称不完全相同的时候,CREATE VIEW
语句还须在列列表中提供列名称。
例如,下面 CREATE VIEW 语句中的代码必须指定列列表,因为第一个 SELECT 语句中的第二个列的名称与第二个 SELECT
语句中的第二个列的名称不同:
CREATE VIEW myview (cola, colb) AS
SELECT colx, coly from firsttab
UNION
SELECT colx, colz from secondtab;