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