バージョンごとのドキュメント一覧

VALUES

VALUES <refpurpose>compute a set of rows</refpurpose> — 行セットを計算する

概要

VALUES ( expression [, ...] ) [, ...]
    [ ORDER BY sort_expression [ ASC | DESC | USING operator ] [, ...] ]
    [ LIMIT { count | ALL } ]
    [ OFFSET start [ ROW | ROWS ] ]
    [ FETCH { FIRST | NEXT } [ count ] { ROW | ROWS } ONLY ]

説明

<title>Description</title>

<command>VALUES</command> computes a row value or set of row values specified by value expressions. It is most commonly used to generate a <quote>constant table</quote> within a larger command, but it can be used on its own. VALUES は、値の式で指定された行あるいは行の集合を計算します。 大きなコマンドの中で定数テーブルを作成するために使用することが多いですが、 それ単独で使用することも可能です。

When more than one row is specified, all the rows must have the same number of elements. The data types of the resulting table's columns are determined by combining the explicit or inferred types of the expressions appearing in that column, using the same rules as for <literal>UNION</literal> (see <xref linkend="typeconv-union-case"/>). 複数行を指定した場合は、すべての行の要素数が同じでなければなりません。 できあがるテーブル列のデータ型を決定するには、 明示的に指定されている型やその列に登場する式から推測できる型を組み合わせて使用します。 これは UNION と同じ方式です (10.5 を参照ください)。

Within larger commands, <command>VALUES</command> is syntactically allowed anywhere that <command>SELECT</command> is. Because it is treated like a <command>SELECT</command> by the grammar, it is possible to use the <literal>ORDER BY</literal>, <literal>LIMIT</literal> (or equivalently <literal>FETCH FIRST</literal>), and <literal>OFFSET</literal> clauses with a <command>VALUES</command> command. 大きなコマンドの中において、 SELECT が文法上使える場所ならどこでもVALUESを使用することができます。 文法上はSELECTと同じ扱いであるため、ORDER BYLIMIT(、これと等価なFETCH FIRST)そしてOFFSET句をVALUESコマンドで使用することができます。

パラメータ

<title>Parameters</title>
expression

A constant or expression to compute and insert at the indicated place in the resulting table (set of rows). In a <command>VALUES</command> list appearing at the top level of an <command>INSERT</command>, an <replaceable class="parameter">expression</replaceable> can be replaced by <literal>DEFAULT</literal> to indicate that the destination column's default value should be inserted. <literal>DEFAULT</literal> cannot be used when <command>VALUES</command> appears in other contexts. 定数あるいは式です。これを計算した結果が、 表 (行セット) の中の指定した場所に挿入されます。 VALUES リストを INSERT の最上位レベルで使用する場合は、 expressionDEFAULT で置き換えることができます。これは、その列のデフォルト値を挿入することを表します。 他の場所で VALUES を使用する場合には、 DEFAULT は使用できません。

sort_expression

An expression or integer constant indicating how to sort the result rows. This expression can refer to the columns of the <command>VALUES</command> result as <literal>column1</literal>, <literal>column2</literal>, etc. For more details see <xref linkend="sql-orderby"/> in the <xref linkend="sql-select"/> documentation. 式あるいは整数の定数で、結果の行をソートする方法を表します。 この式は、VALUES の結果の列を column1column2などのように参照することができます。 詳細はSELECT文書のORDER BY句を参照ください。

operator

A sorting operator. For details see <xref linkend="sql-orderby"/> in the <xref linkend="sql-select"/> documentation. ソート用の演算子です。 詳細はSELECT文書のORDER BY句を参照ください。

count

The maximum number of rows to return. For details see <xref linkend="sql-limit"/> in the <xref linkend="sql-select"/> documentation. 返す行の最大数です。 詳細はSELECT文書のLIMIT句を参照ください。

start

The number of rows to skip before starting to return rows. For details see <xref linkend="sql-limit"/> in the <xref linkend="sql-select"/> documentation. 結果を返す際に読み飛ばす行数です。 詳細はSELECT文書のLIMIT句を参照ください。

注釈

<title>Notes</title>

<command>VALUES</command> lists with very large numbers of rows should be avoided, as you might encounter out-of-memory failures or poor performance. <command>VALUES</command> appearing within <command>INSERT</command> is a special case (because the desired column types are known from the <command>INSERT</command>'s target table, and need not be inferred by scanning the <command>VALUES</command> list), so it can handle larger lists than are practical in other contexts. VALUES で大量の行を扱うことは避けるべきです。 メモリ不足や性能の劣化を生じさせる可能性があります。 VALUESINSERT の中で使用する場合は特別です。 (列の型は INSERT 先のテーブルからわかるので、 VALUES のリストを調べて型を推測する必要がないからです) そのため、他の場面に比べて大きなリストを扱っても実用に耐えます。

<title>Examples</title>

A bare <command>VALUES</command> command: 必要最小限の VALUES コマンドはこのようになります。

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

This 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';

More usually, <command>VALUES</command> is used within a larger SQL command. The most common use is in <command>INSERT</command>: 通常は、VALUES は大きな SQL コマンドの内部で使用します。 最もよくあるのは、INSERT での使用です。

INSERT INTO films (code, title, did, date_prod, kind)
    VALUES ('T_601', 'Yojimbo', 106, '1961-06-16', 'Drama');

In the context of <command>INSERT</command>, entries of a <command>VALUES</command> list can be <literal>DEFAULT</literal> to indicate that the column default should be used here instead of specifying a value: INSERT 内で使用する場合には、VALUES のリストに DEFAULT を指定することができます。 これは、値を具体的に指定するのではなくその列のデフォルトを使用することを表します。

INSERT INTO films VALUES
    ('UA502', 'Bananas', 105, DEFAULT, 'Comedy', '82 minutes'),
    ('T_601', 'Yojimbo', 106, DEFAULT, 'Drama', DEFAULT);

<command>VALUES</command> can also be used where a sub-<command>SELECT</command> might be written, for example in a <literal>FROM</literal> clause: VALUES は、副SELECTが書ける場所に使用することができます。 例えば FROM 句の中などでも使えます。

SELECT f.*
  FROM films f, (VALUES('MGM', 'Horror'), ('UA', 'Sci-Fi')) AS t (studio, kind)
  WHERE f.studio = t.studio AND f.kind = t.kind;

UPDATE employees SET salary = salary * v.increase
  FROM (VALUES(1, 200000, 1.2), (2, 400000, 1.4)) AS v (depno, target, increase)
  WHERE employees.depno = v.depno AND employees.sales >= v.target;

Note that an <literal>AS</literal> clause is required when <command>VALUES</command> is used in a <literal>FROM</literal> clause, just as is true for <command>SELECT</command>. It is not required that the <literal>AS</literal> clause specify names for all the columns, but it's good practice to do so. (The default column names for <command>VALUES</command> are <literal>column1</literal>, <literal>column2</literal>, etc. in <productname>PostgreSQL</productname>, but these names might be different in other database systems.) VALUESFROM句の中で使用する場合には、AS句が必須となることに注意しましょう。 これは SELECT の場合と同様です。 AS句ですべての列の名前を指定する必要はありませんが、指定しておくことをお勧めします。 (VALUESのデフォルトの列名は、PostgreSQLにおいてはcolumn1column2のようになります。 しかし、他のデータベースシステムでは異なるかもしれません。)

When <command>VALUES</command> is used in <command>INSERT</command>, the values are all automatically coerced to the data type of the corresponding destination column. When it's used in other contexts, it might be necessary to specify the correct data type. If the entries are all quoted literal constants, coercing the first is sufficient to determine the assumed type for all: VALUESINSERT の中で使用する場合は、 値の型が挿入先列のデータ型に自動変換されます。 それ以外の場面で使用する際には、正しいデータ型を指定する必要があるかもしれません。 値がすべて引用符付きのリテラル定数である場合は、最初の値にだけ型を指定しておけば十分です。

SELECT * FROM machines
WHERE ip_address IN (VALUES('192.168.0.1'::inet), ('192.168.0.10'), ('192.168.1.43'));

ヒント

For simple <literal>IN</literal> tests, it's better to rely on the <link linkend="functions-comparisons-in-scalar">list-of-scalars</link> form of <literal>IN</literal> than to write a <command>VALUES</command> query as shown above. The list of scalars method requires less writing and is often more efficient. 単に IN を試したいのなら、上のような VALUES クエリを使用するよりも INスカラリスト形式を使用するほうがよいでしょう。 スカラリストの方法の方が記述量が減りますし、たいていはより効率的になります。

互換性

<title>Compatibility</title> <para><command>VALUES</command> conforms to the SQL standard. <literal>LIMIT</literal> and <literal>OFFSET</literal> are <productname>PostgreSQL</productname> extensions; see also under <xref linkend="sql-select"/>.

VALUESはSQL標準に従います。 LIMITおよびOFFSETPostgreSQLの拡張です。 SELECTも参照してください。

関連項目

<title>See Also</title> INSERT, SELECT