VALUES
リストVALUES
は、「定数テーブル」を生成する方法を提供します。
それは実際にはディスク上に作成して配置することなく、問い合わせで使用することができます。
構文を以下に示します。
VALUES ( expression
[, ...] ) [, ...]
括弧で括られた式のリストがそれぞれ、テーブルの行を生成します。
リストは同一の要素数(つまり、テーブルの列数)を持たなければなりません。
また、各リストで対応する項目のデータ型に互換性がなければなりません。
最終的に各列に割り当てられる実際のデータ型は、UNION
と同様の規則に従って決定されます。
(10.5. UNION
、CASE
および関連する構文を参照してください。)
以下に例を示します。
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
の後に式のリストがあるものは、以下と同様に扱われます。
SELECTselect_list
FROMtable_expression
そして、SELECT
が記述できるところであれば、どこにでも記述することができます。
例えば、UNION
の一部として使用することもできますし、sort_specification
(ORDER BY
、LIMIT
、OFFSET
)を付けることもできます。
VALUES
はINSERT
コマンドの元データとしてもっとも頻繁に使用されます。
次に使用頻度が高いのは副問い合わせとしての使用です。
詳しくはVALUESを参照してください。