Naming View Columns
The number of columns that you specify in the column list
must match the number of columns returned by the SELECT statement
that defines the view. If you do not specify a list of columns, the
view inherits the column names of the underlying tables. In the following
example, the view herostock has the same column names as the
columns in Projection clause of the SELECT statement:
CREATE VIEW herostock AS
SELECT stock_num, description, unit_price, unit, unit_descr
FROM stock WHERE manu_code = 'HRO';
You must specify at least one column name in the following circumstances:
- If you provide names for some of the columns in a view, then you must provide names for all the columns. That is, the column list must contain an entry for every column that appears in the view.
- If the SELECT statement returns an expression, the corresponding
column in the view is called a virtual column. You must provide
a name for a virtual column. In the following example, the user must
specify the column parameter because the select list of the Projection
clause of the SELECT statement contains an aggregate expression:
CREATE VIEW newview (firstcol, secondcol) AS SELECT sum(cola), colb FROM oldtab;
- You must also specify column names in cases where any of the selected
columns have duplicate column names without the table qualifiers.
For example, if both orders.order_num and items.order_num appear
in the SELECT statement, the CREATE VIEW statement, must provide
two separate column names to label them:
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;
Here custnum and ocustnum replace the two identical column names.
- The CREATE VIEW statement must also provide column names in the
column list when the SELECT statement includes a UNION or UNION ALL
operator and the names of the corresponding columns in the SELECT
statements are not identical. For example, code in the following CREATE VIEW statement must specify the column list because the second column in the first SELECT statement has a different name from the second column in the second SELECT statement:
CREATE VIEW myview (cola, colb) AS SELECT colx, coly from firsttab UNION SELECT colx, colz from secondtab;