Abfragen ohne Tabellen Entwickeln


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.

BigQuery 2025-09-02Db2 (LUW) 12.1.2aacMariaDB 12.0.2aaadMySQL 9.3.0bbbeOracle DB 23.9acfPostgreSQL 17aaagSQL Server 2022adSQLite 3.50.0aaaValues als eigene AnweisungFrom|Join (values …) tWith t as (values …)From-Klausel Spaltennamen
  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. Nur für Values und Select: FROM (VALUES | SELECT …) t(c1, c2)
  5. Nur für Select: FROM (SELECT …) t(c1, c2)
  6. Nur für Values, dann aber verpflichtend: FROM (VALUES …) t(c1, c2)
  7. Akzeptiert weniger Spalten in <derived column list> als in der Tabelle

20 Jahre SQL-Evolution kann man nicht an einem Tag nachholen. Abonniere den Newsletter via E-Mail, Bluesky oder RSS, um sukzessive aufzuholen und modern-sql.com am Radar zu behalten.

Ü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. COUNT(*) zählt Zeilen (ISO/IEC 9075-2:2023 §10.9 GR 5).

    COUNT(expression) zählt not null Werte (ISO/IEC 9075-2:2023 §10.9 GR 7a).

  2. Validiert auf http://developer.mimer.se/validator/index.htm.

Neuigkeiten Abonnieren

Markus Winands MailinglistenMarkus Winands RSS-FeedMarkus Winand auf LinkedInMarkus Winand auf XINGMarkus Winand auf TwitterMarkus Winand auf Bluesky
Copyright 2015-2025 Markus Winand. Alle Rechte vorbehalten.
Impressum | Kontakt | KEINE GEWÄHR | Handelsmarken | Datenschutz und DSGVO