F855, „Nested ORDER BY in query expression“


BigQueryDb2 (LUW)DuckDBH2MariaDBMySQLOracle DBPostgreSQLSQL ServerSQLite200820102012201420162018202020222024⊘ 3.5.7 - 3.53.0⊘ 2008R2 - 2025⚠ 8.3 - 18a✓ 12cR1 - 23.26.1✓ 5.7 - 9.7.0⊘ 5.0 - 5.6✓ 10.1 - 12.2.2⊘ 5.1 - 10.0.10⚠ 1.4.191 - 2.4.240a✓ 1.0.0 - 1.5.0✓ 9.7 - 12.1.4✓ 2.0+
  1. Einige Varianten

Diese optionale SQL-Funktion deckt die Order By-Klausel für einen einzelnen Zweig einer Union, Intersect oder Except-Operation ab:

(SELECT *
   FROM (VALUES (1), (2)) t(c)
  ORDER BY c
  FETCH FIRST 1 ROW ONLY
)
UNION ALL
SELECT *
 FROM (VALUES (3)) t(c)
-- ORDER BY here applies to the result of the UNION

The first leg of the union uses an order by clause. Note the such legs need to be put into parenthesis so that the scoping of the order by clause is unambiguous. Adding an order by clause to the last leg of union, intersect or except without parenthesis means to sort the total result.

Variants

This feature allows the following order by keys types: ⓵ references to selected columns by name; ⓶ references to columns produced in the from clause if the query is simple0 and ⓷ expressions that contain at least one such column reference.1 Note that positional referencing by an unsigned integer value ⓸ is not standard SQL anymore. While the standard even allows nested order by clause in absences of offset and fetch first, some systems do not allow this pointless clause ⓹.

BigQuery 2026-05-12Db2 (LUW) 12.1.4DuckDB 1.5.0H2 2.4.240abMariaDB 12.2.2cMySQL 9.7.0cOracle DB 23.26.1dPostgreSQL 18aSQL Server 2025dSQLite 3.53.0dselected column ⓵non-selected column ⓶expressions ⓷positional reference ⓸without fetch first, … ⓹
  1. Expressions cannot contain selected names:
    select c AS x FROM (VALUES (1), (2)) t(c) ORDER BY x
  2. Auch als Bind-Parameter: order by ? • Negative Parameter (nicht aber Literale) kehren die Reihenfolge um
  3. Auch als Bind-Parameter: order by ?
  4. Reasonable; ignored in other charts

Normative Referenzen

F855, „Nested ORDER BY in query expression“ is an optional feature in ISO/IEC 9075-2:2023. It first appeared in the 2008 edition.

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. Does not use union, except or intersect (ISO/IEC 9075-2:2023 §7.17 SR 26di1).

  2. But no subqueries and no <set function specifications>

Neuigkeiten Abonnieren

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