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