この記事では、VALUESの概要、パラメーターの仕様、および例を紹介します。
構文
値 (式 [, ...] ) [, ...]
[ORDER BY sort_expression [ ASC | DESC | USING演算子] [, ...] ]
[LIMIT { count | ALL } ]
[オフセットスタート [ROW | ROWS ] ]
[FETCH { FIRST | NEXT } [ count ] { ROW | ROWS} のみ] 説明
VALUESは、値式で指定された行値または行値のセットを計算します。 これは、より大きなコマンド内で「定数テーブル」を生成するために最も一般的に使用されますが、単独で使用することもできます。
複数の行を指定する場合は、すべての行の要素数が同じである必要があります。 結果のテーブルの列のデータ型は、UNIONの場合と同じルールを使用して、その列に表示される式の明示型または推論型を組み合わせることによって決定されます。
より大きなコマンド内では、VALUESはSELECTのどこでも構文的に許可されます。 文法ではSELECTのように扱われるので、ORDER by、LIMIT (または同等にFETCH FIRST) 、およびOFFSET句をVALUESコマンドで使用できます。
パラメーター
expression: 結果のテーブル (行のセット) の指定された場所に計算および挿入する定数または式。INSERTの最上位に表示されるVALUESリストでは、式をDEFAULTに置き換えて、宛先列のデフォルト値を挿入する必要があることを示すことができます。 他のコンテキストでVALUESが表示される場合、DEFAULTは使用できません。sort_expression: 結果の行をソートする方法を示す式または整数定数。 この式は、VALUESの結果の列をcolumn1、column2などとして参照できます。 詳細については、SELECTドキュメントの「ORDER BY句」を参照してください。operator: ソート演算子。 詳細については、SELECTドキュメントのORDER BY句を参照してください。count: 返される行の最大数。 詳細については、SELECTドキュメントのLIMIT句を参照してください。start: 行の戻りを開始する前にスキップする行の数。 詳細については、SELECTドキュメントのLIMIT句を参照してください。
注
メモリ不足の障害やパフォーマンスの低下が発生する可能性があるため、行数が非常に多いVALUESリストは避けてください。 INSERT内に表示されるVALUESは特殊なケースです (目的の列タイプはINSERTのターゲットテーブルから既知であり、VALUESリストをスキャンして推測する必要がないため) 。
例
bare 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'; より一般的には、VALUESはより大きなSQLコマンド内で使用されます。 最も一般的な用途はINSERTです。
INSERT INTO films (code, title, did, date_prod, kind)
値 (「T_601」、「ヨジンボ」、106、「1961-06-16」、「ドラマ」); INSERTのコンテキストでは、VALUESリストのエントリをDEFAULTにして、値を指定する代わりに列のデフォルトをここで使用する必要があることを示します。
は映画の価値に挿入します
('UA502 '、'Bananas' 、105、デフォルト、'Comedy' 、'82分) 、
('T_601 '、'Yojimbo' 、106、DEFAULT、'Drama' 、DEFAULT); VALUESは、FROM句など、サブSELECTが記述される場合にも使用できます。
SELECT f.*
映画からf、(VALUES('MGM' 、'Horror') 、('UA' 、'Sci-Fi')) AS t (スタジオ、種類)
どこf.studio = t.studioとf.kind = t.kind;
従業員の更新SETサラリー=サラリー * v。増加
から (値 (1、200000、1.2) 、(2、400000、1.4)) AS v (depno、target、increase)
どこemployees.de pno = v.de pno AND employees.sales >= v.tar get; VALUESがFROM句で使用される場合は、SELECTと同様にAS句が必要です。 AS句ですべての列の名前を指定する必要はありませんが、これを行うことをお勧めします。 (VALUESのデフォルトの列名はcolumn1、column2などinPostgreSQLですが、これらの名前は他のデータベースシステムでは異なる場合があります。)
INSERTでVALUESを使用すると、値はすべて対応する宛先列のデータ型に自動的に強制されます。 他のコンテキストで使用する場合は、正しいデータ型を指定する必要がある場合があります。 エントリがすべて引用符で囲まれたリテラル定数である場合、すべての仮定型を決定するには、最初の
SELECT * マシンから
WHERE ip_address IN (VALUES('192.168.0.1 '::inet) 、('192.168.0.10') 、('192.168.1.43 ')); 単純なINテストでは、上記のようにVALUESクエリを記述するよりも、INのスカラーのリスト形式を使用する方が良いでしょう。 スカラーのリストメソッドは、書き込みが少なくて済み、多くの場合、より効率的です。