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