ORDER BY sortiert die Ergebniszeilen einer SQL-Abfrage. Ohne ORDER BY liefert die Datenbank die Zeilen in keiner garantierten Reihenfolge – wer eine feste Sortierung braucht, muss sie explizit angeben.

Grundform

SELECT name, preis FROM produkte
ORDER BY preis ASC;

ASC sortiert aufsteigend (klein nach groß, Standard), DESC absteigend (groß nach klein). ORDER BY steht nach WHERE und GROUP BY, aber vor LIMIT.

Mehrere Sortierspalten

SELECT name, kategorie, preis FROM produkte
ORDER BY kategorie ASC, preis DESC;

Die Sortierung erfolgt Spalte für Spalte: erst nach kategorie, innerhalb gleicher Kategorien nach preis absteigend. Die Richtung gilt nur für die jeweilige Spalte – wer alles absteigend will, muss DESC überall hinschreiben.

Sortieren nach berechneten Werten

ORDER BY darf auch auf Ausdrücke und Spalten-Aliase zugreifen, die erst im SELECT entstehen:

SELECT name, preis * menge AS umsatz FROM positionen
ORDER BY umsatz DESC;

NULL-Werte

NULL ist weder klein noch groß. Das Verhalten unterscheidet sich je Datenbank: PostgreSQL sortiert NULL bei ASC standardmäßig ans Ende (NULLS LAST), MySQL/MariaDB ans Anfang. Wer es eindeutig will, schreibt NULLS FIRST oder NULLS LAST – das können PostgreSQL, Oracle und SQL Server, aber nicht MySQL/MariaDB.

Praktische Hinweise

  • Ohne ORDER BY kann die Reihenfolge zwischen zwei Läufen wechseln – bei LIMIT-Seitennavigation führt das zu doppelten oder übersprungenen Zeilen.
  • Für stabile Seitennummerierung zusätzlich nach einem eindeutigen Feld wie der ID sortieren.
  • Ein passender Index kann die Sortierung stark beschleunigen; die Datenbank liest den Index dann in der gewünschten Reihenfolge.