VALUESпредоставляет способ создания « постоянной таблицы » , которую можно использовать в запросе без фактического создания и заполнения таблицы на диске.

VALUES ( expression [, ...] ) [, ...]

Каждый список выражений в скобках создает строку в таблице. Все списки должны иметь одинаковое количество элементов (т. е. количество столбцов в таблице), а соответствующие записи в каждом списке должны иметь совместимые типы данных. Фактический тип данных, назначенный каждому столбцу результата, определяется по тем же правилам, что и для UNION

Например:

VALUES (1, 'one'), (2, 'two'), (3, 'three');

вернет таблицу из двух столбцов и трех строк. Это эффективно эквивалентно:

SELECT 1 AS column1, 'one' AS column2
UNION ALL
SELECT 2, 'two'
UNION ALL
SELECT 3, 'three';

По умолчанию PostgreSQL присваивает имена column1, column2, и т. д. столбцам VALUESтаблицы. Имена столбцов не указаны в стандарте SQL, и разные системы баз данных делают это по-разному, поэтому обычно лучше переопределить имена по умолчанию с помощью списка псевдонимов таблиц, например:

=> SELECT * FROM (VALUES (1, 'one'), (2, 'two'), (3, 'three')) AS t (num,letter);
 num | letter
-----+--------
   1 | one
   2 | two
   3 | three
(3 rows)

Синтаксически VALUESсписки выражений, за которыми следуют списки, считаются эквивалентными:

SELECT select_list FROM table_expression

и может появиться где угодно SELECTможет. Например, вы можете использовать его как часть UNIONили присоединить к нему sort_specification( ORDER BY, LIMIT, и/или OFFSET). VALUESчаще всего используется в качестве источника данных в INSERTкоманде, а затем чаще всего в качестве подзапроса.