Manchmal geht es nur darum ein bestimmte Art SQL zu verwenden auszuprobieren oder vorzuführen. Selbst wenn die eigentliche Abfrage simple ist, kann es mühsam sein die benötigten Testtabellen vorzubereiten. In solchen Fällen kann das values
-Statement helfen.
In seiner vollen Leistungsfähigkeit kann values
nicht nur Daten für insert
bereitstellen, sondern auch alleinstehend wie select
verwendet werden. Im Gegensatz zu select
greift values
nicht auf Tabellen zu, sondern nur auf die Daten die direkt in der SQL-Anweisung enthalten sind.
Das Folgende Beispiel zeigt, dass COUNT(*)
und COUNT(ausdruck)
etwas unterschiedliches bedeuten0:
SELECT COUNT(c1)
, COUNT(*)
FROM (VALUES (1)
, (NULL)
) t1(c1)
Das Beispiel nutzt eine values
-Klausel um eine Tabelle mit zwei Zeilen und einer Spalte (unbekannten Namens) zu erzeugen. Einer der beiden Werte ist null
. Um der Spalten einen Namen zu geben – damit man diesen später in count
verwenden kann – wir der abgeleiteten Tabelle der Name t1
und ihrer Spalte der Name c1
mittels der „Spalten-Aliasse in der from
-Klausel“-Syntax zugeordnet. Alternativ kann man eine with
-Klausel zur Benennung der Spalten verwenden. Von da an kann t1
wie eine ganz normale Tabelle oder View verwendet werden.
Kompatibilität
Das Beispiel entspricht vollem SQL-92 beziehungsweise späteren Standards mit den optionalen Funktionen F641, F591 sowie F6611.
- 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
- Akzeptiert fehlende Spalte-Aliasse
- Nicht für normale Tabellen oder Views