I PostgreSQL, VALUES
kommandot returnerar en uppsättning av en eller flera rader som en tabell. Det är en tabellvärdekonstruktor som kan användas som en del av ett större kommando, eller som en fristående SQL-sats.
Syntax
Den officiella syntaxen ser ut så här:
VALUES ( expression [, ...] ) [, ...]
[ ORDER BY sort_expression [ ASC | DESC | USING operator ] [, ...] ]
[ LIMIT { count | ALL } ]
[ OFFSET start [ ROW | ROWS ] ]
[ FETCH { FIRST | NEXT } [ count ] { ROW | ROWS } ONLY ]
Exempel
Här är ett enkelt exempel för att visa hur det fungerar:
VALUES (1, 2, 3), (4, 5, 6);
Resultat:
+---------+---------+---------+ | column1 | column2 | column3 | +---------+---------+---------+ | 1 | 2 | 3 | | 4 | 5 | 6 | +---------+---------+---------+
De resulterande kolumnerna heter implicit column1
, column2
, column3
och så vidare (även om detta kan ändras – se SELECT
uttalande alternativ senare i denna artikel).
Varje rad definieras av ett eller flera värden inom parentes. När mer än en rad anges måste alla rader ha samma antal element
Här är ett annat exempel:
VALUES ('Peter', 'Griffin'), ('Bart', 'Simpson');
Resultat:
+---------+---------+ | column1 | column2 | +---------+---------+ | Peter | Griffin | | Bart | Simpson | +---------+---------+
ORDER BY
Klausul
Syntaxen tillåter användning av ORDER BY
klausul för att ordna resultaten.
Exempel:
VALUES (1, 2, 3), (4, 5, 6), (7, 8, 9) ORDER BY column1 DESC;
Resultat:
+---------+---------+---------+ | column1 | column2 | column3 | +---------+---------+---------+ | 7 | 8 | 9 | | 4 | 5 | 6 | | 1 | 2 | 3 | +---------+---------+---------+
LIMIT
Klausul
Vi kan använda LIMIT
sats för att begränsa antalet rader som matas ut:
VALUES
('Peter', 'Griffin'),
('Homer', 'Simpson'),
('Ned', 'Flanders')
LIMIT 2;
Resultat:
+---------+---------+ | column1 | column2 | +---------+---------+ | Peter | Griffin | | Homer | Simpson | +---------+---------+
OFFSET
Klausul
Här är ett exempel på hur du använder OFFSET
sats med VALUES
kommando:
VALUES
(1, 'Peter', 'Griffin'),
(2, 'Homer', 'Simpson'),
(3, 'Ned', 'Flanders'),
(4, 'Barney', 'Rubble'),
(5, 'George', 'Costanza')
OFFSET 3;
Resultat:
+---------+---------+----------+ | column1 | column2 | column3 | +---------+---------+----------+ | 4 | Barney | Rubble | | 5 | George | Costanza | +---------+---------+----------+
FETCH
Klausul
Här är ett exempel på hur du använder FETCH
klausul:
VALUES
(1, 'Peter', 'Griffin'),
(2, 'Homer', 'Simpson'),
(3, 'Ned', 'Flanders'),
(4, 'Barney', 'Rubble'),
(5, 'George', 'Costanza')
FETCH FIRST 3 ROWS ONLY;
Resultat:
+---------+---------+----------+ | column1 | column2 | column3 | +---------+---------+----------+ | 1 | Peter | Griffin | | 2 | Homer | Simpson | | 3 | Ned | Flanders | +---------+---------+----------+
Inom en SELECT
Uttalande
Vi kan också använda VALUES
sats i en SELECT
uttalande, som om VALUES
Tabellkonstruktören var en faktisk tabell:
SELECT
FirstName,
LastName
FROM
(VALUES
(1, 'Peter', 'Griffin'),
(2, 'Homer', 'Simpson'),
(3, 'Ned', 'Flanders')
) AS Idiots(IdiotId, FirstName, LastName)
WHERE IdiotId = 2;
Resultat:
+-----------+----------+ | firstname | lastname | +-----------+----------+ | Homer | Simpson | +-----------+----------+
Varje radkonstruktör måste innehålla samma antal värden
Varje radkonstruktor i samma VALUES
uttalandet måste ha samma antal värden i sin värdelista.
Därför kan vi inte göra detta:
VALUES (1, 2), (3);
Resultat:
ERROR: VALUES lists must all be the same length LINE 1: VALUES (1, 2), (3); ^
Använda VALUES
för att infoga data
Vi kan använda VALUES
sats i kombination med INSERT
för att infoga data i en tabell.
Exempel:
CREATE TABLE Idiots (
IdiotId int,
FirstName varchar(50),
LastName varchar(50)
);
INSERT INTO Idiots VALUES
(1, 'Peter', 'Griffin'),
(2, 'Homer', 'Simpson'),
(3, 'Ned', 'Flanders');
Det skapade en tabell som heter Idiots
och infogade tre rader i den.
Vi kan nu använda en SELECT
uttalande för att se de nya värdena i tabellen:
SELECT * FROM Idiots;
Resultat:
+---------+-----------+----------+ | idiotid | firstname | lastname | +---------+-----------+----------+ | 1 | Peter | Griffin | | 2 | Homer | Simpson | | 3 | Ned | Flanders | +---------+-----------+----------+