W PostgreSQL VALUES polecenie zwraca zestaw jednego lub więcej wierszy w postaci tabeli. Jest to konstruktor wartości tabeli, który może być używany jako część większego polecenia lub jako samodzielna instrukcja SQL.
Składnia
Oficjalna składnia wygląda następująco:
VALUES ( expression [, ...] ) [, ...]
[ ORDER BY sort_expression [ ASC | DESC | USING operator ] [, ...] ]
[ LIMIT { count | ALL } ]
[ OFFSET start [ ROW | ROWS ] ]
[ FETCH { FIRST | NEXT } [ count ] { ROW | ROWS } ONLY ] Przykład
Oto prosty przykład pokazujący, jak to działa:
VALUES (1, 2, 3), (4, 5, 6); Wynik:
+---------+---------+---------+ | column1 | column2 | column3 | +---------+---------+---------+ | 1 | 2 | 3 | | 4 | 5 | 6 | +---------+---------+---------+
Otrzymane kolumny są niejawnie nazwane column1 , column2 , column3 i tak dalej (choć można to zmienić – zobacz SELECT opcja oświadczenia w dalszej części tego artykułu).
Każdy wiersz jest zdefiniowany przez co najmniej jedną wartość ujętą w nawiasy. Jeśli określono więcej niż jeden wiersz, wszystkie wiersze muszą mieć tę samą liczbę elementów
Oto kolejny przykład:
VALUES ('Peter', 'Griffin'), ('Bart', 'Simpson'); Wynik:
+---------+---------+ | column1 | column2 | +---------+---------+ | Peter | Griffin | | Bart | Simpson | +---------+---------+
ORDER BY Klauzula
Składnia pozwala na użycie ORDER BY klauzulę w celu uporządkowania wyników.
Przykład:
VALUES (1, 2, 3), (4, 5, 6), (7, 8, 9) ORDER BY column1 DESC; Wynik:
+---------+---------+---------+ | column1 | column2 | column3 | +---------+---------+---------+ | 7 | 8 | 9 | | 4 | 5 | 6 | | 1 | 2 | 3 | +---------+---------+---------+
LIMIT Klauzula
Możemy użyć LIMIT klauzula ograniczająca liczbę wierszy, które są wyprowadzane:
VALUES
('Peter', 'Griffin'),
('Homer', 'Simpson'),
('Ned', 'Flanders')
LIMIT 2; Wynik:
+---------+---------+ | column1 | column2 | +---------+---------+ | Peter | Griffin | | Homer | Simpson | +---------+---------+
OFFSET Klauzula
Oto przykład użycia OFFSET klauzula z VALUES polecenie:
VALUES
(1, 'Peter', 'Griffin'),
(2, 'Homer', 'Simpson'),
(3, 'Ned', 'Flanders'),
(4, 'Barney', 'Rubble'),
(5, 'George', 'Costanza')
OFFSET 3; Wynik:
+---------+---------+----------+ | column1 | column2 | column3 | +---------+---------+----------+ | 4 | Barney | Rubble | | 5 | George | Costanza | +---------+---------+----------+
FETCH Klauzula
Oto przykład użycia FETCH klauzula:
VALUES
(1, 'Peter', 'Griffin'),
(2, 'Homer', 'Simpson'),
(3, 'Ned', 'Flanders'),
(4, 'Barney', 'Rubble'),
(5, 'George', 'Costanza')
FETCH FIRST 3 ROWS ONLY; Wynik:
+---------+---------+----------+ | column1 | column2 | column3 | +---------+---------+----------+ | 1 | Peter | Griffin | | 2 | Homer | Simpson | | 3 | Ned | Flanders | +---------+---------+----------+
W ramach SELECT Oświadczenie
Możemy również użyć VALUES instrukcja w SELECT oświadczenie, tak jakby VALUES konstruktor tabeli był rzeczywistą tabelą:
SELECT
FirstName,
LastName
FROM
(VALUES
(1, 'Peter', 'Griffin'),
(2, 'Homer', 'Simpson'),
(3, 'Ned', 'Flanders')
) AS Idiots(IdiotId, FirstName, LastName)
WHERE IdiotId = 2; Wynik:
+-----------+----------+ | firstname | lastname | +-----------+----------+ | Homer | Simpson | +-----------+----------+
Każdy konstruktor wierszy musi zawierać taką samą liczbę wartości
Każdy konstruktor wiersza w tych samych VALUES instrukcja musi mieć taką samą liczbę wartości na swojej liście wartości.
Dlatego nie możemy tego zrobić:
VALUES (1, 2), (3); Wynik:
ERROR: VALUES lists must all be the same length
LINE 1: VALUES (1, 2), (3);
^ Korzystanie z VALUES wstawić dane
Możemy użyć VALUES instrukcja w połączeniu z INSERT oświadczenie, aby wstawić dane do tabeli.
Przykład:
CREATE TABLE Idiots (
IdiotId int,
FirstName varchar(50),
LastName varchar(50)
);
INSERT INTO Idiots VALUES
(1, 'Peter', 'Griffin'),
(2, 'Homer', 'Simpson'),
(3, 'Ned', 'Flanders');
To stworzyło tabelę o nazwie Idiots i wstawił do niego trzy rzędy.
Możemy teraz użyć SELECT oświadczenie, aby zobaczyć nowe wartości w tabeli:
SELECT * FROM Idiots; Wynik:
+---------+-----------+----------+ | idiotid | firstname | lastname | +---------+-----------+----------+ | 1 | Peter | Griffin | | 2 | Homer | Simpson | | 3 | Ned | Flanders | +---------+-----------+----------+