VALUES provides a way to generate a
table” that can be used in a query without having to
actually create and populate a table on-disk. The syntax is
expression[, ...] ) [, ...]
Each parenthesized list of expressions generates a row in the
table. The lists must all have the same number of elements (i.e.,
the number of columns in the table), and corresponding entries in
each list must have compatible data types. The actual data type
assigned to each column of the result is determined using the same
rules as for
UNION (see Section 10.5).
As an example:
VALUES (1, 'one'), (2, 'two'), (3, 'three');
will return a table of two columns and three rows. It's effectively equivalent to:
SELECT 1 AS column1, 'one' AS column2 UNION ALL SELECT 2, 'two' UNION ALL SELECT 3, 'three';
By default, PostgreSQL assigns
column2, etc. to the columns of a
VALUES table. The column names are not specified
by the SQL standard and different database systems do it
differently, so it's usually better to override the default names
with a table alias list, like this:
=> SELECT * FROM (VALUES (1, 'one'), (2, 'two'), (3, 'three')) AS t (num,letter); num | letter -----+-------- 1 | one 2 | two 3 | three (3 rows)
VALUES followed by
expression lists is treated as equivalent to:
and can appear anywhere a
can. For example, you can use it as part of a
UNION, or attach a
OFFSET) to it.
VALUES is most commonly used as the data source in
INSERT command, and next most
commonly as a subquery.
For more information see VALUES.
If you see anything in the documentation that is not correct, does not match your experience with the particular feature or requires further clarification, please use this form to report a documentation issue.