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