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