VALUES <refpurpose>compute a set of rows</refpurpose> — 行セットを計算する
VALUES (expression
[, ...] ) [, ...] [ ORDER BYsort_expression
[ ASC | DESC | USINGoperator
] [, ...] ] [ LIMIT {count
| ALL } ] [ OFFSETstart
[ ROW | ROWS ] ] [ FETCH { FIRST | NEXT } [count
] { ROW | ROWS } ONLY ]
<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 BY
、LIMIT
(、これと等価なFETCH FIRST
)そしてOFFSET
句をVALUES
コマンドで使用することができます。
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
の最上位レベルで使用する場合は、
expression
を DEFAULT
で置き換えることができます。これは、その列のデフォルト値を挿入することを表します。
他の場所で 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
の結果の列を column1
、column2
などのように参照することができます。
詳細は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句を参照ください。
<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
で大量の行を扱うことは避けるべきです。
メモリ不足や性能の劣化を生じさせる可能性があります。
VALUES
を INSERT
の中で使用する場合は特別です。
(列の型は INSERT
先のテーブルからわかるので、
VALUES
のリストを調べて型を推測する必要がないからです)
そのため、他の場面に比べて大きなリストを扱っても実用に耐えます。
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.)
VALUES
をFROM
句の中で使用する場合には、AS
句が必須となることに注意しましょう。
これは SELECT
の場合と同様です。
AS
句ですべての列の名前を指定する必要はありませんが、指定しておくことをお勧めします。
(VALUES
のデフォルトの列名は、PostgreSQLにおいてはcolumn1
、column2
のようになります。
しかし、他のデータベースシステムでは異なるかもしれません。)
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:
VALUES
を INSERT
の中で使用する場合は、
値の型が挿入先列のデータ型に自動変換されます。
それ以外の場面で使用する際には、正しいデータ型を指定する必要があるかもしれません。
値がすべて引用符付きのリテラル定数である場合は、最初の値にだけ型を指定しておけば十分です。
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
のスカラリスト形式を使用するほうがよいでしょう。
スカラリストの方法の方が記述量が減りますし、たいていはより効率的になります。
VALUES
はSQL標準に従います。
LIMIT
およびOFFSET
はPostgreSQLの拡張です。
SELECTも参照してください。