PostgreSQLでは、 VALUES コマンドは、1つ以上の行のセットをテーブルとして返します。これは、より大きなコマンドの一部として、またはスタンドアロンのSQLステートメントとして使用できるテーブル値コンストラクターです。
公式の構文は次のようになります:
VALUES ( expression [, ...] ) [, ...]
[ ORDER BY sort_expression [ ASC | DESC | USING operator ] [, ...] ]
[ LIMIT { count | ALL } ]
[ OFFSET start [ ROW | ROWS ] ]
[ FETCH { FIRST | NEXT } [ count ] { ROW | ROWS } ONLY ] これがどのように機能するかを示す簡単な例です:
VALUES (1, 2, 3), (4, 5, 6); 結果:
+---------+---------+---------+ | column1 | column2 | column3 | +---------+---------+---------+ | 1 | 2 | 3 | | 4 | 5 | 6 | +---------+---------+---------+
結果の列には、暗黙的に column1という名前が付けられます 、 column2 、 column3 など(ただし、これは変更できます。 SELECTを参照してください。 この記事の後半にあるステートメントオプション)。
各行は、括弧で囲まれた1つ以上の値で定義されます。複数の行を指定する場合は、すべての行に同じ数の要素が含まれている必要があります
別の例を次に示します。
VALUES ('Peter', 'Griffin'), ('Bart', 'Simpson'); 結果:
+---------+---------+ | column1 | column2 | +---------+---------+ | Peter | Griffin | | Bart | Simpson | +---------+---------+
ORDER BY 条項
この構文では、 ORDER BYを使用できます。 結果を並べ替えるための句。
例:
VALUES (1, 2, 3), (4, 5, 6), (7, 8, 9) ORDER BY column1 DESC; 結果:
+---------+---------+---------+ | column1 | column2 | column3 | +---------+---------+---------+ | 7 | 8 | 9 | | 4 | 5 | 6 | | 1 | 2 | 3 | +---------+---------+---------+
LIMIT 条項
LIMITを使用できます 出力される行数を制限する句:
VALUES
('Peter', 'Griffin'),
('Homer', 'Simpson'),
('Ned', 'Flanders')
LIMIT 2; 結果:
+---------+---------+ | column1 | column2 | +---------+---------+ | Peter | Griffin | | Homer | Simpson | +---------+---------+
オフセットコード> 条項
OFFSETの使用例を次に示します。 VALUESを含む句 コマンド:
VALUES
(1, 'Peter', 'Griffin'),
(2, 'Homer', 'Simpson'),
(3, 'Ned', 'Flanders'),
(4, 'Barney', 'Rubble'),
(5, 'George', 'Costanza')
OFFSET 3;
結果:
+---------+---------+----------+
| column1 | column2 | column3 |
+---------+---------+----------+
| 4 | Barney | Rubble |
| 5 | George | Costanza |
+---------+---------+----------+
FETCH 条項
FETCHの使用例を次に示します。 条項:
VALUES
(1, 'Peter', 'Griffin'),
(2, 'Homer', 'Simpson'),
(3, 'Ned', 'Flanders'),
(4, 'Barney', 'Rubble'),
(5, 'George', 'Costanza')
FETCH FIRST 3 ROWS ONLY;
結果:
+---------+---------+----------+
| column1 | column2 | column3 |
+---------+---------+----------+
| 1 | Peter | Griffin |
| 2 | Homer | Simpson |
| 3 | Ned | Flanders |
+---------+---------+----------+
SELECT内 ステートメント
VALUESを使用することもできます SELECT内のステートメント VALUESのようにステートメント テーブルコンストラクタは実際のテーブルでした:
SELECT
FirstName,
LastName
FROM
(VALUES
(1, 'Peter', 'Griffin'),
(2, 'Homer', 'Simpson'),
(3, 'Ned', 'Flanders')
) AS Idiots(IdiotId, FirstName, LastName)
WHERE IdiotId = 2;
結果:
+-----------+----------+
| firstname | lastname |
+-----------+----------+
| Homer | Simpson |
+-----------+----------+
各行コンストラクターには同じ数の値が含まれている必要があります
同じVALUES内の各行コンストラクター ステートメントの値リストには、同じ数の値が含まれている必要があります。
したがって、これを行うことはできません:
VALUES (1, 2), (3);
結果:
ERROR: VALUES lists must all be the same length
LINE 1: VALUES (1, 2), (3);
^ VALUESの使用 データを挿入するには
VALUESを使用できます INSERTと組み合わせたステートメント テーブルにデータを挿入するステートメント。
例:
CREATE TABLE Idiots (
IdiotId int,
FirstName varchar(50),
LastName varchar(50)
);
INSERT INTO Idiots VALUES
(1, 'Peter', 'Griffin'),
(2, 'Homer', 'Simpson'),
(3, 'Ned', 'Flanders');
これにより、 Idiotsというテーブルが作成されました それに3行挿入しました。
これで、 SELECTを使用できます テーブルの新しい値を確認するステートメント:
SELECT * FROM Idiots;
結果:
+---------+-----------+----------+
| idiotid | firstname | lastname |
+---------+-----------+----------+
| 1 | Peter | Griffin |
| 2 | Homer | Simpson |
| 3 | Ned | Flanders |
+---------+-----------+----------+