7.7. VALUES
列表
可以在查询中使用由VALUES
生成的"常数表", 而无需在磁盘上实际创建这个表。语法如下:
VALUES ( _expression_ [, ...] ) [, ...]
每个括号中的表达式列表生成表中的一行。每个列表中的项数(也就是字段数)必须相等, 并且对应的数据类型必须兼容。最终表中每个字段的数据类型将使用与UNION
(参见Section 10.5)相同的规则确定。
例如:
VALUES (1, 'one'), (2, 'two'), (3, 'three');
将得到 2 列 3 行的表。并且与下面的语句等价:
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
和下面的语句等价:
SELECT _select_list_ FROM _table_expression_
并且可以出现在任何SELECT
可以出现的地方。例如,你可以把它用于UNION
的一部分,或者在其上附加一个_sort_specification_
(ORDER BY
,LIMIT
,OFFSET
)。VALUES
通常用作INSERT
命令的数据源或者子查询。
更多信息参见VALUES。