In PostgreSQL zijn de VALUES commando retourneert een set van een of meer rijen als een tabel. Het is een tabelwaardeconstructor die kan worden gebruikt als onderdeel van een grotere opdracht of als een op zichzelf staande SQL-instructie.
Syntaxis
De officiële syntaxis gaat als volgt:
VALUES ( expression [, ...] ) [, ...]
[ ORDER BY sort_expression [ ASC | DESC | USING operator ] [, ...] ]
[ LIMIT { count | ALL } ]
[ OFFSET start [ ROW | ROWS ] ]
[ FETCH { FIRST | NEXT } [ count ] { ROW | ROWS } ONLY ] Voorbeeld
Hier is een eenvoudig voorbeeld om te demonstreren hoe het werkt:
VALUES (1, 2, 3), (4, 5, 6); Resultaat:
+---------+---------+---------+ | column1 | column2 | column3 | +---------+---------+---------+ | 1 | 2 | 3 | | 4 | 5 | 6 | +---------+---------+---------+
De resulterende kolommen hebben impliciet de naam column1 , column2 , column3 enzovoort (hoewel dit kan worden gewijzigd – zie de SELECT verklaringsoptie verderop in dit artikel).
Elke rij wordt gedefinieerd door een of meer waarden tussen haakjes. Als er meer dan één rij is opgegeven, moeten alle rijen hetzelfde aantal elementen hebben
Hier is nog een voorbeeld:
VALUES ('Peter', 'Griffin'), ('Bart', 'Simpson'); Resultaat:
+---------+---------+ | column1 | column2 | +---------+---------+ | Peter | Griffin | | Bart | Simpson | +---------+---------+
De ORDER BY Clausule
De syntaxis maakt het gebruik van de ORDER BY . mogelijk clausule om de resultaten te ordenen.
Voorbeeld:
VALUES (1, 2, 3), (4, 5, 6), (7, 8, 9) ORDER BY column1 DESC; Resultaat:
+---------+---------+---------+ | column1 | column2 | column3 | +---------+---------+---------+ | 7 | 8 | 9 | | 4 | 5 | 6 | | 1 | 2 | 3 | +---------+---------+---------+
De LIMIT Clausule
We kunnen de LIMIT . gebruiken clausule om het aantal rijen dat wordt uitgevoerd te beperken:
VALUES
('Peter', 'Griffin'),
('Homer', 'Simpson'),
('Ned', 'Flanders')
LIMIT 2; Resultaat:
+---------+---------+ | column1 | column2 | +---------+---------+ | Peter | Griffin | | Homer | Simpson | +---------+---------+
De OFFSET Clausule
Hier is een voorbeeld van het gebruik van de OFFSET clausule met de VALUES commando:
VALUES
(1, 'Peter', 'Griffin'),
(2, 'Homer', 'Simpson'),
(3, 'Ned', 'Flanders'),
(4, 'Barney', 'Rubble'),
(5, 'George', 'Costanza')
OFFSET 3; Resultaat:
+---------+---------+----------+ | column1 | column2 | column3 | +---------+---------+----------+ | 4 | Barney | Rubble | | 5 | George | Costanza | +---------+---------+----------+
De FETCH Clausule
Hier is een voorbeeld van het gebruik van de FETCH clausule:
VALUES
(1, 'Peter', 'Griffin'),
(2, 'Homer', 'Simpson'),
(3, 'Ned', 'Flanders'),
(4, 'Barney', 'Rubble'),
(5, 'George', 'Costanza')
FETCH FIRST 3 ROWS ONLY; Resultaat:
+---------+---------+----------+ | column1 | column2 | column3 | +---------+---------+----------+ | 1 | Peter | Griffin | | 2 | Homer | Simpson | | 3 | Ned | Flanders | +---------+---------+----------+
Binnen een SELECT Verklaring
We kunnen ook de VALUES . gebruiken statement binnen een SELECT statement, alsof de VALUES table constructor waren een echte tabel:
SELECT
FirstName,
LastName
FROM
(VALUES
(1, 'Peter', 'Griffin'),
(2, 'Homer', 'Simpson'),
(3, 'Ned', 'Flanders')
) AS Idiots(IdiotId, FirstName, LastName)
WHERE IdiotId = 2; Resultaat:
+-----------+----------+ | firstname | lastname | +-----------+----------+ | Homer | Simpson | +-----------+----------+
Elke rij-constructor moet hetzelfde aantal waarden bevatten
Elke rijconstructor in dezelfde VALUES statement moet hetzelfde aantal waarden in de lijst met waarden hebben.
Daarom kunnen we dit niet doen:
VALUES (1, 2), (3); Resultaat:
ERROR: VALUES lists must all be the same length
LINE 1: VALUES (1, 2), (3);
^ VALUES gebruiken om gegevens in te voegen
We kunnen de VALUES . gebruiken statement in combinatie met de INSERT statement om gegevens in een tabel in te voegen.
Voorbeeld:
CREATE TABLE Idiots (
IdiotId int,
FirstName varchar(50),
LastName varchar(50)
);
INSERT INTO Idiots VALUES
(1, 'Peter', 'Griffin'),
(2, 'Homer', 'Simpson'),
(3, 'Ned', 'Flanders');
Dat creëerde een tabel met de naam Idiots en voegde er drie rijen in.
We kunnen nu een SELECT . gebruiken statement om de nieuwe waarden in de tabel te zien:
SELECT * FROM Idiots; Resultaat:
+---------+-----------+----------+ | idiotid | firstname | lastname | +---------+-----------+----------+ | 1 | Peter | Griffin | | 2 | Homer | Simpson | | 3 | Ned | Flanders | +---------+-----------+----------+