PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Spiegazione del comando VALUES di PostgreSQL

In PostgreSQL, il VALUES comando restituisce un insieme di una o più righe come tabella. È un costruttore di valori di tabella che può essere utilizzato come parte di un comando più ampio o come istruzione SQL autonoma.

Sintassi

La sintassi ufficiale è questa:

VALUES ( expression [, ...] ) [, ...]
    [ ORDER BY sort_expression [ ASC | DESC | USING operator ] [, ...] ]
    [ LIMIT { count | ALL } ]
    [ OFFSET start [ ROW | ROWS ] ]
    [ FETCH { FIRST | NEXT } [ count ] { ROW | ROWS } ONLY ]

Esempio

Ecco un semplice esempio per dimostrare come funziona:

VALUES (1, 2, 3), (4, 5, 6);

Risultato:

+---------+---------+---------+
| column1 | column2 | column3 |
+---------+---------+---------+
|       1 |       2 |       3 |
|       4 |       5 |       6 |
+---------+---------+---------+

Le colonne risultanti sono implicitamente denominate column1 , column2 , column3 e così via (sebbene questo possa essere modificato – vedi il SELECT opzione dichiarazione più avanti in questo articolo).

Ogni riga è definita da uno o più valori racchiusi tra parentesi. Quando viene specificata più di una riga, tutte le righe devono avere lo stesso numero di elementi

Ecco un altro esempio:

VALUES ('Peter', 'Griffin'), ('Bart', 'Simpson');

Risultato:

+---------+---------+
| column1 | column2 |
+---------+---------+
| Peter   | Griffin |
| Bart    | Simpson |
+---------+---------+

Il ORDER BY Clausola

La sintassi consente l'utilizzo di ORDER BY clausola per ordinare i risultati.

Esempio:

VALUES (1, 2, 3), (4, 5, 6), (7, 8, 9) ORDER BY column1 DESC;

Risultato:

+---------+---------+---------+
| column1 | column2 | column3 |
+---------+---------+---------+
|       7 |       8 |       9 |
|       4 |       5 |       6 |
|       1 |       2 |       3 |
+---------+---------+---------+

Il LIMIT Clausola

Possiamo usare il LIMIT clausola per limitare il numero di righe che vengono emesse:

VALUES 
    ('Peter', 'Griffin'), 
    ('Homer', 'Simpson'), 
    ('Ned', 'Flanders')
LIMIT 2;

Risultato:

+---------+---------+
| column1 | column2 |
+---------+---------+
| Peter   | Griffin |
| Homer   | Simpson |
+---------+---------+

Il OFFSET Clausola

Ecco un esempio di utilizzo di OFFSET clausola con VALUES comando:

VALUES 
    (1, 'Peter', 'Griffin'), 
    (2, 'Homer', 'Simpson'), 
    (3, 'Ned', 'Flanders'), 
    (4, 'Barney', 'Rubble'), 
    (5, 'George', 'Costanza')
OFFSET 3;

Risultato:

+---------+---------+----------+
| column1 | column2 | column3  |
+---------+---------+----------+
|       4 | Barney  | Rubble   |
|       5 | George  | Costanza |
+---------+---------+----------+

Il FETCH Clausola

Ecco un esempio di utilizzo di FETCH clausola:

VALUES 
    (1, 'Peter', 'Griffin'), 
    (2, 'Homer', 'Simpson'), 
    (3, 'Ned', 'Flanders'), 
    (4, 'Barney', 'Rubble'), 
    (5, 'George', 'Costanza')
FETCH FIRST 3 ROWS ONLY; 

Risultato:

+---------+---------+----------+
| column1 | column2 | column3  |
+---------+---------+----------+
|       1 | Peter   | Griffin  |
|       2 | Homer   | Simpson  |
|       3 | Ned     | Flanders |
+---------+---------+----------+

All'interno di un SELECT Dichiarazione

Possiamo anche usare i VALUES istruzione all'interno di un SELECT istruzione, come se il VALUES costruttore di tabelle erano una tabella reale:

SELECT
   FirstName,
   LastName
FROM
   (VALUES 
        (1, 'Peter', 'Griffin'), 
        (2, 'Homer', 'Simpson'), 
        (3, 'Ned', 'Flanders')
   ) AS Idiots(IdiotId, FirstName, LastName)
WHERE IdiotId = 2;

Risultato:

+-----------+----------+
| firstname | lastname |
+-----------+----------+
| Homer     | Simpson  |
+-----------+----------+

Ogni costruttore di riga deve contenere lo stesso numero di valori

Ogni costruttore di riga nello stesso VALUES l'istruzione deve avere lo stesso numero di valori nella sua lista valori.

Pertanto, non possiamo farlo:

VALUES (1, 2), (3);

Risultato:

ERROR:  VALUES lists must all be the same length
LINE 1: VALUES (1, 2), (3);
                        ^

Utilizzo di VALUES per inserire dati

Possiamo usare i VALUES istruzione insieme a INSERT istruzione per inserire dati in una tabella.

Esempio:

CREATE TABLE Idiots (
    IdiotId int,
    FirstName varchar(50),
    LastName varchar(50)
    );

INSERT INTO Idiots VALUES 
    (1, 'Peter', 'Griffin'), 
    (2, 'Homer', 'Simpson'), 
    (3, 'Ned', 'Flanders');

Ciò ha creato una tabella chiamata Idiots e inserito tre righe al suo interno.

Ora possiamo usare un SELECT istruzione per vedere i nuovi valori nella tabella:

SELECT * FROM Idiots;

Risultato:

+---------+-----------+----------+
| idiotid | firstname | lastname |
+---------+-----------+----------+
|       1 | Peter     | Griffin  |
|       2 | Homer     | Simpson  |
|       3 | Ned       | Flanders |
+---------+-----------+----------+