sql >> Databáze >  >> RDS >> PostgreSQL

Vysvětlení příkazu PostgreSQL VALUES

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

  1. Limit velikosti indexu 900 bajtů v délce znaků

  2. Optimalizace dotazů SQL — Jak zjistit, kdy a zda je to potřeba

  3. SQL Server Collection Inventory Script -1

  4. Jak mohu použít kaskádu mazání v mysql?