Das Schlüsselwort values
ist vermutlich so alt wie SQL selbst und aufgrund seiner Verwendung bei insert
allseits bekannt. Das ist jedoch nur die Funktionalität, die vom SQL-92 Einstiegslevel gefordert wird. Mit vollem SQL-920 hat values
weitreichendere Funktionen: Es ist überall gültig, wo auch select
gültig ist, und kann mehrere Zeilen erzeugen.
Verwendung mit vollem SQL-92
Mit vollem SQL-92 folgt auf values
im Allgemeinen1 eine kommaseparierte Liste von Zeilen, die jeweils eine in Klammern gesetzte Spalten-Liste enthalten. Dabei muss jede Zeile dieselbe Anzahl an Spalten2 haben und die entsprechenden Spalten sollten in allen Zeilen vom selben Typ sein3 – genau wie bei union
.
VALUES [ROW]('Zeile 1 Spalte 1', 'Zeile 1 Spalte 2')
, [ROW]('Zeile 2 Spalte 1', 'Zeile 2 Spalte 2')
Das optionale Schlüsselwort Row
wird nicht auf breiter Basis unterstützt, wird jedoch von manchen Produkten benötigt (siehe Kompatibilität).
Das Ergebnis dieses Beispieles ist eine 2×2 Tabelle, deren Werte wie in den Texten angegeben angeordnet sind. Die Spalten-Namen sind implementationsabhängig können aber in ein from
-Klausel umbenannt werden.
Dieses Beispiel kann überall eingesetzt werden, wo auch select
erlaubt ist4. Das ist, um Daten an insert
zu übergeben (mehrere Zeilen), in Unterabfragen, und sogar als eigenständige Anweisung.
Anwendungsfälle
Kompatibilität
- Nur ohne Schlüsselwort
row
- Nur mit Schlüsselwort
row
:values row('r1c1','r1c2'), row('r2c1', 'r2c2')
- Erfordert Spaltennamen in der
With
-Klausel:with x (c1,c2) as (values …)
• Nur ohne Schlüsselwortrow
- Kein Zugriff auf Spalten möglich • Nur ohne Schlüsselwort
row