values — Zeilen aus dem Nichts erschaffen


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 müssen 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

BigQueryaDb2 (LUW)aaacaMariaDBaaaadMySQLbbbbOracle DBPostgreSQLaaaaaSQL ServeraaSQLiteaaaaaMehrzeilen insert … valuesValues als eigene AnweisungFrom|Join (values …) tWith t as (values …)[not] in (values …)
  1. Nur ohne Schlüsselwort row
  2. Nur mit Schlüsselwort row: values row('r1c1','r1c2'), row('r2c1', 'r2c2')
  3. Erfordert Spaltennamen in der With-Klausel: with x (c1,c2) as (values …) • Nur ohne Schlüsselwort row
  4. Kein Zugriff auf Spalten möglich • Nur ohne Schlüsselwort row

Über den Autor

Foto von Markus Winand

Markus Winand gibt auf modern-sql.com Einblick in SQL und zeigt, wie es von verschiedenen Systemen unterstützt wird. Zuvor machte er use-the-index-luke.com, was er noch immer wartet. Markus kann als Trainer, Sprecher und Berater auf winand.at engagiert werden.

Sein Buch kaufen

Titelbild von „SQL Performance Explained“: Eichhörnchen läuft durchs Grass

Die Essenz: SQL-Tuning auf 200 Seiten

Jetzt Kaufen
(Taschenbuch und/oder PDF)

Sein Training

Markus verwandelt veraltetes SQL-92-Wissen in solides und zeitgemäßes SQL-Know-how

Erfahren Sie mehr»

Fußnoten

  1. Feature F641, “row and table constructors”, in späteren Standards.

  2. <row value special case> wir hier bewusst vernachlässigt.

  3. SQL-92, §7.2, Syntax Rule 1; SQL:2016, Part 2, §7.3, Syntax Rule 1

  4. SQL-92, §7.2, General Rule 1. Spätere Standards erlauben Konvertierungen (siehe SQL:2016, Part 2, §7.3, Syntax Rule 4 welche auf §9.5 verweist).

  5. Sowohl values als auch select werden aus <simple table> referenziert.

Mit Markus Winand verbinden

Markus Winand auf LinkedInMarkus Winand auf XINGMarkus Winand auf Twitter
„modern SQL“ von Markus Winand ist unter einer Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Unported License lizenziert.
Impressum | Kontakt | KEINE GEWÄHR | Handelsmarken | Datenschutz und DSGVO | CC-BY-NC-ND 3.0 Lizenz