PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

PostgreSQL VALUES-Befehl erklärt

In PostgreSQL sind die VALUES Der Befehl gibt einen Satz von einer oder mehreren Zeilen als Tabelle zurück. Es ist ein Tabellenwertkonstruktor, der als Teil eines größeren Befehls oder als eigenständige SQL-Anweisung verwendet werden kann.

Syntax

Die offizielle Syntax lautet wie folgt:

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

Beispiel

Hier ist ein einfaches Beispiel, um zu demonstrieren, wie es funktioniert:

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

Ergebnis:

+---------+---------+---------+
| column1 | column2 | column3 |
+---------+---------+---------+
|       1 |       2 |       3 |
|       4 |       5 |       6 |
+---------+---------+---------+

Die resultierenden Spalten heißen implizit column1 , column2 , column3 und so weiter (obwohl dies geändert werden kann – siehe SELECT Anweisungsoption später in diesem Artikel).

Jede Zeile wird durch einen oder mehrere in Klammern eingeschlossene Werte definiert. Wenn mehr als eine Zeile angegeben wird, müssen alle Zeilen die gleiche Anzahl von Elementen haben

Hier ist ein weiteres Beispiel:

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

Ergebnis:

+---------+---------+
| column1 | column2 |
+---------+---------+
| Peter   | Griffin |
| Bart    | Simpson |
+---------+---------+

Der ORDER BY Klausel

Die Syntax erlaubt die Verwendung des ORDER BY -Klausel, um die Ergebnisse zu ordnen.

Beispiel:

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

Ergebnis:

+---------+---------+---------+
| column1 | column2 | column3 |
+---------+---------+---------+
|       7 |       8 |       9 |
|       4 |       5 |       6 |
|       1 |       2 |       3 |
+---------+---------+---------+

Das LIMIT Klausel

Wir können das LIMIT verwenden -Klausel, um die Anzahl der ausgegebenen Zeilen zu begrenzen:

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

Ergebnis:

+---------+---------+
| column1 | column2 |
+---------+---------+
| Peter   | Griffin |
| Homer   | Simpson |
+---------+---------+

Der OFFSET Klausel

Hier ist ein Beispiel für die Verwendung von OFFSET -Klausel mit den VALUES Befehl:

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

Ergebnis:

+---------+---------+----------+
| column1 | column2 | column3  |
+---------+---------+----------+
|       4 | Barney  | Rubble   |
|       5 | George  | Costanza |
+---------+---------+----------+

Der FETCH Klausel

Hier ist ein Beispiel für die Verwendung von FETCH Klausel:

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

Ergebnis:

+---------+---------+----------+
| column1 | column2 | column3  |
+---------+---------+----------+
|       1 | Peter   | Griffin  |
|       2 | Homer   | Simpson  |
|       3 | Ned     | Flanders |
+---------+---------+----------+

Innerhalb eines SELECT Erklärung

Wir können auch die VALUES verwenden -Anweisung innerhalb eines SELECT Anweisung, als ob die VALUES Tabellenkonstruktor wäre eine tatsächliche Tabelle:

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

Ergebnis:

+-----------+----------+
| firstname | lastname |
+-----------+----------+
| Homer     | Simpson  |
+-----------+----------+

Jeder Zeilenkonstruktor muss die gleiche Anzahl von Werten enthalten

Jeder Zeilenkonstruktor in denselben VALUES -Anweisung muss die gleiche Anzahl von Werten in ihrer Werteliste haben.

Daher können wir Folgendes nicht tun:

VALUES (1, 2), (3);

Ergebnis:

ERROR:  VALUES lists must all be the same length
LINE 1: VALUES (1, 2), (3);
                        ^

Verwendung von VALUES zum Einfügen von Daten

Wir können die VALUES verwenden -Anweisung in Verbindung mit INSERT Anweisung zum Einfügen von Daten in eine Tabelle.

Beispiel:

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

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

Dadurch wurde eine Tabelle namens Idiots erstellt und fügte drei Zeilen ein.

Wir können jetzt ein SELECT verwenden -Anweisung, um die neuen Werte in der Tabelle anzuzeigen:

SELECT * FROM Idiots;

Ergebnis:

+---------+-----------+----------+
| idiotid | firstname | lastname |
+---------+-----------+----------+
|       1 | Peter     | Griffin  |
|       2 | Homer     | Simpson  |
|       3 | Ned       | Flanders |
+---------+-----------+----------+