Dans PostgreSQL, les VALUES
La commande renvoie un ensemble d'une ou plusieurs lignes sous forme de tableau. Il s'agit d'un constructeur de valeur de table qui peut être utilisé dans le cadre d'une commande plus large ou en tant qu'instruction SQL autonome.
Syntaxe
La syntaxe officielle ressemble à ceci :
VALUES ( expression [, ...] ) [, ...]
[ ORDER BY sort_expression [ ASC | DESC | USING operator ] [, ...] ]
[ LIMIT { count | ALL } ]
[ OFFSET start [ ROW | ROWS ] ]
[ FETCH { FIRST | NEXT } [ count ] { ROW | ROWS } ONLY ]
Exemple
Voici un exemple simple pour illustrer son fonctionnement :
VALUES (1, 2, 3), (4, 5, 6);
Résultat :
+---------+---------+---------+ | column1 | column2 | column3 | +---------+---------+---------+ | 1 | 2 | 3 | | 4 | 5 | 6 | +---------+---------+---------+
Les colonnes résultantes sont implicitement nommées column1
, column2
, column3
et ainsi de suite (bien que cela puisse être modifié - voir le SELECT
option d'instruction plus loin dans cet article).
Chaque ligne est définie par une ou plusieurs valeurs entre parenthèses. Lorsque plusieurs lignes sont spécifiées, toutes les lignes doivent avoir le même nombre d'éléments
Voici un autre exemple :
VALUES ('Peter', 'Griffin'), ('Bart', 'Simpson');
Résultat :
+---------+---------+ | column1 | column2 | +---------+---------+ | Peter | Griffin | | Bart | Simpson | +---------+---------+
Le ORDER BY
Article
La syntaxe permet l'utilisation du ORDER BY
clause afin d'ordonner les résultats.
Exemple :
VALUES (1, 2, 3), (4, 5, 6), (7, 8, 9) ORDER BY column1 DESC;
Résultat :
+---------+---------+---------+ | column1 | column2 | column3 | +---------+---------+---------+ | 7 | 8 | 9 | | 4 | 5 | 6 | | 1 | 2 | 3 | +---------+---------+---------+
La LIMIT
Article
Nous pouvons utiliser le LIMIT
clause pour limiter le nombre de lignes générées :
VALUES
('Peter', 'Griffin'),
('Homer', 'Simpson'),
('Ned', 'Flanders')
LIMIT 2;
Résultat :
+---------+---------+ | column1 | column2 | +---------+---------+ | Peter | Griffin | | Homer | Simpson | +---------+---------+
Le OFFSET
Article
Voici un exemple d'utilisation du OFFSET
clause avec les VALUES
commande :
VALUES
(1, 'Peter', 'Griffin'),
(2, 'Homer', 'Simpson'),
(3, 'Ned', 'Flanders'),
(4, 'Barney', 'Rubble'),
(5, 'George', 'Costanza')
OFFSET 3;
Résultat :
+---------+---------+----------+ | column1 | column2 | column3 | +---------+---------+----------+ | 4 | Barney | Rubble | | 5 | George | Costanza | +---------+---------+----------+
Le FETCH
Article
Voici un exemple d'utilisation de FETCH
clause :
VALUES
(1, 'Peter', 'Griffin'),
(2, 'Homer', 'Simpson'),
(3, 'Ned', 'Flanders'),
(4, 'Barney', 'Rubble'),
(5, 'George', 'Costanza')
FETCH FIRST 3 ROWS ONLY;
Résultat :
+---------+---------+----------+ | column1 | column2 | column3 | +---------+---------+----------+ | 1 | Peter | Griffin | | 2 | Homer | Simpson | | 3 | Ned | Flanders | +---------+---------+----------+
Dans un SELECT
Déclaration
Nous pouvons également utiliser les VALUES
instruction dans un SELECT
déclaration, comme si les VALUES
constructeur de table était une table réelle :
SELECT
FirstName,
LastName
FROM
(VALUES
(1, 'Peter', 'Griffin'),
(2, 'Homer', 'Simpson'),
(3, 'Ned', 'Flanders')
) AS Idiots(IdiotId, FirstName, LastName)
WHERE IdiotId = 2;
Résultat :
+-----------+----------+ | firstname | lastname | +-----------+----------+ | Homer | Simpson | +-----------+----------+
Chaque constructeur de ligne doit contenir le même nombre de valeurs
Chaque constructeur de ligne dans le même VALUES
l'instruction doit avoir le même nombre de valeurs dans sa liste de valeurs.
Par conséquent, nous ne pouvons pas faire ceci :
VALUES (1, 2), (3);
Résultat :
ERROR: VALUES lists must all be the same length LINE 1: VALUES (1, 2), (3); ^
Utilisation de VALUES
pour insérer des données
Nous pouvons utiliser les VALUES
déclaration en conjonction avec le INSERT
déclaration pour insérer des données dans une table.
Exemple :
CREATE TABLE Idiots (
IdiotId int,
FirstName varchar(50),
LastName varchar(50)
);
INSERT INTO Idiots VALUES
(1, 'Peter', 'Griffin'),
(2, 'Homer', 'Simpson'),
(3, 'Ned', 'Flanders');
Cela a créé une table appelée Idiots
et y ai inséré trois lignes.
Nous pouvons maintenant utiliser un SELECT
pour voir les nouvelles valeurs dans le tableau :
SELECT * FROM Idiots;
Résultat :
+---------+-----------+----------+ | idiotid | firstname | lastname | +---------+-----------+----------+ | 1 | Peter | Griffin | | 2 | Homer | Simpson | | 3 | Ned | Flanders | +---------+-----------+----------+