PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Explication de la commande PostgreSQL VALUES

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