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