PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Wyjaśnienie polecenia PostgreSQL VALUES

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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Przyznaj wszystko w określonym schemacie w bazie danych do roli grupowej w PostgreSQL

  2. PostgreSQL, SELECT z max id

  3. Jak znaleźć rozmiar dysku tabeli Postgres / PostgreSQL i jej indeksy?

  4. Ogranicz dostęp użytkowników PostgreSQL za pomocą schematu i widoków

  5. ECONNREFUSED dla Postgres na nodeJS z dokerami