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 |
+---------+-----------+----------+