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