Normally, we define column names using the create statement and alias them in select if needed. However, to alias a column using select you must first know its the original name. This is not the case when using table functions, unnest or values. The only way to assign names to such columns is on the basis of their position.
Option 1: Using Aliases in the from Clause
Besides table aliases, intermediate level SQL-92 also supports renaming columns in the from clause:
SELECT b, a
FROM (VALUES (1, 'a')
) t(a, b)The column names produced by values are implementation-depended.0 That is not useful for portable SQL. To circumvent that glitch, the example assigns the table alias t1 followed by a list of column aliases in parenthesis (just c1 in that case). The select clause can now refer to c1 in a portable manner.
Option 2: Using Common-Table-Expressions (with)
Starting with SQL:1999 the with clause can also be used to rename columns based on their position—i.e., without knowing their original name:
WITH t (a, b) AS (
VALUES (1, 'a')
)
SELECT b, a
FROM tCompatibility
Even though from aliases were already required for intermediate SQL-92 and became mandatory in SQL:1999, with is nevertheless better supported:

