sql >> Database teknologi >  >> RDS >> PostgreSQL

PostgreSQL VALUES Kommando forklaret

I PostgreSQL er VALUES kommando returnerer et sæt af en eller flere rækker som en tabel. Det er en tabelværdikonstruktør, der kan bruges som en del af en større kommando eller som en selvstændig SQL-sætning.

Syntaks

Den officielle syntaks lyder sådan her:

VALUES ( expression [, ...] ) [, ...] [ ORDER BY sort_expression [ ASC | DESC | USING operator ] [, ...] ] [ LIMIT { count | ALL } ] [ OFFSET start [ ROW | ROWS ] ] [ FETCH { FIRST | NEXT } [ count ] { ROW | ROWS } ONLY ]

Eksempel

Her er et simpelt eksempel for at demonstrere, hvordan det virker:

VALUES (1, 2, 3), (4, 5, 6); 

Resultat:

+--------+---------+---------+| kolonne 1 | kolonne 2 | kolonne 3 |+--------+---------+---------+| 1 | 2 | 3 || 4 | 5 | 6 |+--------+---------+---------+

De resulterende kolonner er implicit navngivet column1 , column2 , column3 og så videre (selvom dette kan ændres – se SELECT erklæringsmulighed senere i denne artikel).

Hver række er defineret af en eller flere værdier omgivet af parentes. Når mere end én række er angivet, skal alle rækkerne have det samme antal elementer

Her er et andet eksempel:

VALUES ('Peter', 'Griffin'), ('Bart', 'Simpson'); 

Resultat:

+--------+---------+| kolonne 1 | kolonne 2 |+--------+---------+| Peter | Griffin || Bart | Simpson |+--------+---------+

ORDER BY Klausul

Syntaksen tillader brug af ORDER BY klausul for at sortere resultaterne.

Eksempel:

VALUES (1, 2, 3), (4, 5, 6), (7, 8, 9) ORDER BY column1 DESC; 

Resultat:

+--------+---------+---------+| kolonne 1 | kolonne 2 | kolonne 3 |+--------+---------+---------+| 7 | 8 | 9 || 4 | 5 | 6 || 1 | 2 | 3 |+--------+---------+---------+

LIMIT Klausul

Vi kan bruge LIMIT klausul for at begrænse antallet af rækker, der udskrives:

VALUES 
    ('Peter', 'Griffin'), 
    ('Homer', 'Simpson'), 
    ('Ned', 'Flanders')
LIMIT 2; 

Resultat:

+--------+---------+| kolonne 1 | kolonne 2 |+--------+---------+| Peter | Griffin || Homer | Simpson |+--------+---------+

OFFSET Klausul

Her er et eksempel på brug af OFFSET klausul med VALUES kommando:

VALUES 
    (1, 'Peter', 'Griffin'), 
    (2, 'Homer', 'Simpson'), 
    (3, 'Ned', 'Flanders'), 
    (4, 'Barney', 'Rubble'), 
    (5, 'George', 'Costanza')
OFFSET 3; 

Resultat:

+--------+---------+----------+| kolonne 1 | kolonne 2 | kolonne 3 |+--------+---------+----------+| 4 | Barney | Murbrokker || 5 | George | Costanza |+---------+--------+----------+

FETCH Klausul

Her er et eksempel på brug af FETCH klausul:

VALUES 
    (1, 'Peter', 'Griffin'), 
    (2, 'Homer', 'Simpson'), 
    (3, 'Ned', 'Flanders'), 
    (4, 'Barney', 'Rubble'), 
    (5, 'George', 'Costanza')
FETCH FIRST 3 ROWS ONLY;  

Resultat:

+--------+---------+----------+| kolonne 1 | kolonne 2 | kolonne 3 |+--------+---------+----------+| 1 | Peter | Griffin || 2 | Homer | Simpson || 3 | Ned | Flandern |+---------+--------+----------+

Inden for en SELECT Erklæring

Vi kan også bruge VALUES sætning i en SELECT sætning, som om VALUES tabelkonstruktør var en faktisk tabel:

SELECT
   FirstName,
   LastName
FROM
   (VALUES 
        (1, 'Peter', 'Griffin'), 
        (2, 'Homer', 'Simpson'), 
        (3, 'Ned', 'Flanders')
   ) AS Idiots(IdiotId, FirstName, LastName)
WHERE IdiotId = 2; 

Resultat:

+-------+-----------+| fornavn | efternavn |+-------+----------+| Homer | Simpson |+-----------+----------+

Hver rækkekonstruktør skal indeholde det samme antal værdier

Hver rækkekonstruktør i samme VALUES sætningen skal have det samme antal værdier i sin værdiliste.

Derfor kan vi ikke gøre dette:

VALUES (1, 2), (3); 

Resultat:

FEJL:VALUES-lister skal alle have samme længdeLINJE 1:VALUES (1, 2), (3); ^

Brug af VALUES for at indsætte data

Vi kan bruge VALUES sætning i forbindelse med INSERT sætning for at indsætte data i en tabel.

Eksempel:

CREATE TABLE Idiots (
    IdiotId int,
    FirstName varchar(50),
    LastName varchar(50)
    );

INSERT INTO Idiots VALUES 
    (1, 'Peter', 'Griffin'), 
    (2, 'Homer', 'Simpson'), 
    (3, 'Ned', 'Flanders'); 

Det skabte en tabel kaldet Idiots og indsatte tre rækker i den.

Vi kan nu bruge en SELECT sætning for at se de nye værdier i tabellen:

SELECT * FROM Idiots; 

Resultat:

+--------+-----------+----------+| idiot | fornavn | efternavn |+--------+-----------+----------+| 1 | Peter | Griffin || 2 | Homer | Simpson || 3 | Ned | Flandern |+--------+------------+----------+

  1. Forskellen mellem inline og out-of-line begrænsninger

  2. Hvad er forskellen mellem visninger og materialiserede visninger i Oracle?

  3. SQL Server - Auto-inkrementering, der tillader UPDATE-sætninger

  4. SQL Server INFORMATION_SCHEMA visninger | Se om der findes en tabel