值
列表 #值
提供了一种在查询中生成“常量表”的方法,而无需实际创建并在磁盘上填充表。语法为
VALUES ( expression
[, ...] ) [, ...]
每个括号内的表达式列表会在数据表中生成一行。所有列表必须具有相同数量的元素(例如,数据表中的列数),并且每个列表中的对应项必须具有兼容的数据类型。分配给结果集每列的实际数据类型使用与 UNION
相同的规则确定(见 第 10.5 节)。
例如
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为 VALUES
表的列分配 column1
、column2
等名称。列名称没有在 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
与
SELECTselect_list
FROMtable_expression
视为等价的,并且可以出现在允许 SELECT
的任何位置。例如,你可以将它用作 UNION
的一部分,或者将 sort_specification
(ORDER BY
、LIMIT
和/或 OFFSET
)附加到它。最常见的使用 VALUES
的情形是在 INSERT
命令中用作数据源,其次是最常作为子查询来使用。
如需了解更多信息,请参阅 VALUES。