V PostgreSQL, VALUES příkaz vrátí sadu jednoho nebo více řádků jako tabulku. Je to konstruktor hodnot tabulky, který lze použít jako součást většího příkazu nebo jako samostatný příkaz SQL.
Syntaxe
Oficiální syntaxe vypadá takto:
VALUES ( expression [, ...] ) [, ...]
[ ORDER BY sort_expression [ ASC | DESC | USING operator ] [, ...] ]
[ LIMIT { count | ALL } ]
[ OFFSET start [ ROW | ROWS ] ]
[ FETCH { FIRST | NEXT } [ count ] { ROW | ROWS } ONLY ] Příklad
Zde je jednoduchý příklad, který demonstruje, jak to funguje:
VALUES (1, 2, 3), (4, 5, 6); Výsledek:
+---------+---------+---------+ | column1 | column2 | column3 | +---------+---------+---------+ | 1 | 2 | 3 | | 4 | 5 | 6 | +---------+---------+---------+
Výsledné sloupce jsou implicitně pojmenovány column1 , column2 , column3 a tak dále (i když to lze změnit – viz SELECT možnost výpisu dále v tomto článku).
Každý řádek je definován jednou nebo více hodnotami uzavřenými v závorkách. Pokud je zadáno více než jeden řádek, všechny řádky musí mít stejný počet prvků
Zde je další příklad:
VALUES ('Peter', 'Griffin'), ('Bart', 'Simpson'); Výsledek:
+---------+---------+ | column1 | column2 | +---------+---------+ | Peter | Griffin | | Bart | Simpson | +---------+---------+
ORDER BY Ustanovení
Syntaxe umožňuje použití ORDER BY klauzule za účelem uspořádání výsledků.
Příklad:
VALUES (1, 2, 3), (4, 5, 6), (7, 8, 9) ORDER BY column1 DESC; Výsledek:
+---------+---------+---------+ | column1 | column2 | column3 | +---------+---------+---------+ | 7 | 8 | 9 | | 4 | 5 | 6 | | 1 | 2 | 3 | +---------+---------+---------+
LIMIT Ustanovení
Můžeme použít LIMIT klauzule k omezení počtu řádků, které jsou na výstupu:
VALUES
('Peter', 'Griffin'),
('Homer', 'Simpson'),
('Ned', 'Flanders')
LIMIT 2; Výsledek:
+---------+---------+ | column1 | column2 | +---------+---------+ | Peter | Griffin | | Homer | Simpson | +---------+---------+
OFFSET Ustanovení
Zde je příklad použití OFFSET klauzule s VALUES příkaz:
VALUES
(1, 'Peter', 'Griffin'),
(2, 'Homer', 'Simpson'),
(3, 'Ned', 'Flanders'),
(4, 'Barney', 'Rubble'),
(5, 'George', 'Costanza')
OFFSET 3; Výsledek:
+---------+---------+----------+ | column1 | column2 | column3 | +---------+---------+----------+ | 4 | Barney | Rubble | | 5 | George | Costanza | +---------+---------+----------+
FETCH Ustanovení
Zde je příklad použití FETCH klauzule:
VALUES
(1, 'Peter', 'Griffin'),
(2, 'Homer', 'Simpson'),
(3, 'Ned', 'Flanders'),
(4, 'Barney', 'Rubble'),
(5, 'George', 'Costanza')
FETCH FIRST 3 ROWS ONLY; Výsledek:
+---------+---------+----------+ | column1 | column2 | column3 | +---------+---------+----------+ | 1 | Peter | Griffin | | 2 | Homer | Simpson | | 3 | Ned | Flanders | +---------+---------+----------+
V rámci SELECT Prohlášení
Můžeme také použít VALUES příkaz v rámci SELECT příkaz, jako by VALUES konstruktor tabulky byly skutečnou tabulkou:
SELECT
FirstName,
LastName
FROM
(VALUES
(1, 'Peter', 'Griffin'),
(2, 'Homer', 'Simpson'),
(3, 'Ned', 'Flanders')
) AS Idiots(IdiotId, FirstName, LastName)
WHERE IdiotId = 2; Výsledek:
+-----------+----------+ | firstname | lastname | +-----------+----------+ | Homer | Simpson | +-----------+----------+
Každý řádkový konstruktor musí obsahovat stejný počet hodnot
Každý konstruktor řádku ve stejném VALUES příkaz musí mít ve svém seznamu hodnot stejný počet hodnot.
Proto to nemůžeme udělat:
VALUES (1, 2), (3); Výsledek:
ERROR: VALUES lists must all be the same length
LINE 1: VALUES (1, 2), (3);
^ Pomocí VALUES vložit data
Můžeme použít VALUES ve spojení s INSERT příkaz pro vložení dat do tabulky.
Příklad:
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 vytvořilo tabulku s názvem Idiots a vložili do něj tři řádky.
Nyní můžeme použít SELECT příkaz k zobrazení nových hodnot v tabulce:
SELECT * FROM Idiots; Výsledek:
+---------+-----------+----------+ | idiotid | firstname | lastname | +---------+-----------+----------+ | 1 | Peter | Griffin | | 2 | Homer | Simpson | | 3 | Ned | Flanders | +---------+-----------+----------+