Sortieren mit ORDER BY: ASC und DESC verstehen

Daten aus einer Datenbank liegen oft in unsortierter Form vor. Die Reihenfolge der ausgegebenen Zeilen ist nicht garantiert und kann sich bei jeder Abfrage ändern. Ohne eine klare Sortierung ist es schwierig, Muster zu erkennen oder schnelle Entscheidungen zu treffen.

Die ORDER BY-Klausel in SQL ermöglicht es dir, Ergebnismengen gezielt zu ordnen – zum Beispiel alphabetisch nach Namen, nach Preisen oder nach einem Datum.

In diesem Artikel erfährst du Schritt für Schritt:

  • wie die grundlegende Syntax von ORDER BY aussieht
  • wie du auf- und absteigend sortieren kannst (ASC und DESC)
  • wie du mehrere Spalten gleichzeitig sortierst
  • welche Sonderfälle es bei NULL-Werten gibt
  • und worauf du in Sachen Performance achten solltest

Am Ende des Artikels findest du ein paar Übungsaufgaben, um dein Wissen direkt anzuwenden.

ORDER BY ASC DESC

Die Grundlagen: Syntax von ORDER BY

Die ORDER BY-Klausel wird verwendet, um die Ergebnismenge einer SELECT-Abfrage nach bestimmten Spalten zu sortieren. Sie steht immer am Ende des SELECT-Statements, direkt vor optionalen LIMIT– oder OFFSET-Angaben.

Grundlegender Aufbau einer Abfrage mit ORDER BY:

SELECT spalte1, spalte2, ...
FROM tabelle
ORDER BY spalte1;

Beispiel: Du möchtest die Mitarbeiter nach ihrem Gehalt sortieren:

SELECT vorname, nachname, gehalt
FROM mitarbeiter
ORDER BY gehalt;

Hinweis: Ohne eine explizite Sortierrichtung wird standardmäßig aufsteigend (ASC) sortiert. Das bedeutet:

  • Bei Zahlen: vom kleinsten zum größten Wert
  • Bei Texten: alphabetisch A-Z (abhängig vom Zeichensatz)
  • Bei Datumswerten: vom ältesten zum neuesten Datum

Die ORDER BY-Klausel bildet die Basis für alle weiteren Sortiermöglichkeiten, die wir in den nächsten Abschnitten behandeln werden.

Die Sortierrichtungen: ASC und DESC im Detail

ASC (Ascending): Aufsteigend sortieren

Mit ASC sortierst du Werte aufsteigend, also vom kleinsten zum größten Wert. Bei verschiedenen Datentypen bedeutet das:

  • Zahlen: 1, 2, 3, …
  • Texte: A, B, C, … (abhängig vom Zeichensatz/Collation)
  • Datum: ältestes zu neuestem Datum

Beispiel:

SELECT vorname, nachname
FROM mitarbeiter
ORDER BY nachname ASC;

Dies sortiert die Mitarbeiter alphabetisch nach Nachname von A bis Z.

DESC (Descending): Absteigend sortieren

Mit DESC sortierst du Werte absteigend, also vom größten zum kleinsten Wert:

  • Zahlen: 100, 99, 98, …
  • Texte: Z, Y, X, …
  • Datum: neuestes zu ältestem Datum

Beispiel:

SELECT vorname, nachname, gehalt
FROM mitarbeiter
ORDER BY gehalt DESC;

Hier erscheinen die Mitarbeiter mit dem höchsten Gehalt zuerst.

Vergleich ASC vs. DESC

Name Gehalt ASC (Gehalt) DESC (Gehalt)
Anna 2500 1 4
Ben 3000 2 3
Clara 2000 3 2
David 1500 4 1

Diese Tabelle zeigt, wie dieselben Werte einmal auf- und einmal absteigend sortiert werden.

Praxis-Beispiele anhand einer Beispieldatenbank

Für die Praxisbeispiele definieren wir eine einfache Tabelle produkte mit den Spalten:

  • id – eindeutige Produkt-ID
  • name – Name des Produkts
  • kategorie – Produktkategorie
  • preis – Preis des Produkts
  • bewertung – Kundenbewertung

Beispiel 1: Einfache Sortierung nach einer Spalte

Du möchtest die Produkte nach Preis absteigend sortieren, um die „Top-Produkte“ zuerst zu sehen:

SELECT name, preis
FROM produkte
ORDER BY preis DESC;

Beispiel 2: Sortierung nach einer anderen Spalte

Für ein alphabetisches Verzeichnis der Produkte sortierst du nach dem Namen aufsteigend:

SELECT name, preis
FROM produkte
ORDER BY name ASC;

Diese einfachen Beispiele zeigen, wie du mit ORDER BY gezielt die Reihenfolge deiner Daten beeinflussen kannst. In den nächsten Abschnitten gehen wir auf komplexere Sortierungen ein, z. B. nach mehreren Spalten.

Mehrspaltige Sortierung: Die wahre Stärke von ORDER BY

Mit ORDER BY kannst du nicht nur nach einer Spalte sortieren, sondern auch nach mehreren. Dabei gilt das Prinzip:

„Sortiere zuerst nach Kriterium A, und wenn Werte gleich sind, sortiere innerhalb dieser Gruppe nach Kriterium B.“

Beispiel: Sortierung nach Kategorie und Preis

Du möchtest alle Produkte zuerst nach Kategorie aufsteigend sortieren und innerhalb derselben Kategorie die Produkte nach Preis absteigend anzeigen:

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

Erklärung:

  • kategorie ASC: Sortiert die Kategorien alphabetisch A-Z.
  • preis DESC: Innerhalb jeder Kategorie werden die Produkte nach Preis von hoch nach niedrig sortiert.
  • Die Reihenfolge der Spalten in der ORDER BY-Klausel bestimmt die Priorität der Sortierung.

Mehrspaltige Sortierungen sind besonders nützlich, wenn du komplexe Listen übersichtlich darstellen möchtest, z. B. in Reports oder Dashboards.

Sortierung nach abgeleiteten Werten und Spaltenposition

Sortieren nach Berechnungen

Mit ORDER BY kannst du nicht nur nach vorhandenen Spalten sortieren, sondern auch nach berechneten Werten oder Ausdrücken.

Beispiel: Sortierung nach dem Gesamtwert einer Bestellung (einzelpreis * menge):

SELECT produkt, einzelpreis, menge, (einzelpreis * menge) AS gesamtpreis
FROM bestellungen
ORDER BY (einzelpreis * menge) DESC;

Hier werden die Bestellungen nach dem höchsten Gesamtwert zuerst angezeigt.

Sortieren nach Spaltenposition

Es ist auch möglich, sich auf die Position der Spalte im SELECT-Statement zu beziehen. Zum Beispiel:

SELECT name, kategorie, preis
FROM produkte
ORDER BY 3;

Die 3 bezieht sich auf die dritte Spalte (preis). Allerdings gibt es dabei einige Risiken:

  • Wenn du die Reihenfolge der Spalten im SELECT-Statement änderst, kann die Sortierung unerwartet werden.
  • Diese Methode eignet sich nur für schnelle Ad-hoc-Abfragen.
  • Es ist sicherer, explizit die Spaltennamen in ORDER BY anzugeben.

Sortierungen nach berechneten Werten oder Spaltenpositionen bieten zusätzliche Flexibilität, sollten aber mit Bedacht eingesetzt werden.

Umgang mit NULL-Werten bei der Sortierung

In SQL steht NULL für einen unbekannten oder fehlenden Wert. Beim Sortieren kann das besondere Effekte haben.

Standardverhalten

  • Bei aufsteigender Sortierung (ASC) erscheinen NULL-Werte meist am Ende.
  • Bei absteigender Sortierung (DESC) erscheinen NULL-Werte oft am Anfang, je nach Datenbank.

Beispiel in PostgreSQL oder MySQL 8.0+:

SELECT name, bewertung
FROM produkte
ORDER BY bewertung ASC;

Produkte ohne Bewertung (NULL) werden hier am Ende gelistet.

NULLS FIRST / NULLS LAST

Einige Datenbanken bieten die Optionen NULLS FIRST oder NULLS LAST, um das Verhalten explizit zu steuern:

SELECT name, bewertung
FROM produkte
ORDER BY bewertung DESC NULLS LAST;

Damit kannst du z. B. Produkte mit Bewertung zuerst sortieren und die ohne Bewertung ans Ende setzen.

Es lohnt sich, das Verhalten von NULL-Werten bei der von dir verwendeten Datenbank zu prüfen, um unerwartete Ergebnisse zu vermeiden.

Performance-Hinweise und Best Practices

Indexe für schnellere Sortierung

Sortieren kann sehr ressourcenintensiv sein, insbesondere bei großen Tabellen. Ohne passende Indexe muss die gesamte Ergebnismenge im Arbeitsspeicher sortiert werden, was die Abfrage verlangsamt.

Tipp: Lege Indexe auf den Spalten an, die du häufig sortierst. So verbessert sich die Performance deutlich.

Selektivität beachten

  • Sortiere nur nach den Spalten, die du wirklich brauchst.
  • Vermeide SELECT * in Kombination mit ORDER BY, da unnötige Daten die Abfrage verlangsamen.

Weitere Best Practices

  • Überlege, ob die Sortierung wirklich nötig ist – manchmal reicht die natürliche Reihenfolge der Daten.
  • Bei komplexen Sortierungen nach mehreren Spalten oder Berechnungen kann ein gut gewählter Index die Abfrage erheblich beschleunigen.
  • Teste deine Abfragen bei großen Datensätzen, um Engpässe frühzeitig zu erkennen.

Mit diesen Hinweisen kannst du sicherstellen, dass deine ORDER BY-Abfragen effizient bleiben, selbst bei großen Tabellen.

Fazit: Ergebnisse steuern

Mit ORDER BY kannst du die Reihenfolge deiner Abfrageergebnisse gezielt steuern. Standardmäßig sortiert ASC aufsteigend, während DESC absteigend sortiert. Du kannst mehrere Sortierkriterien kombinieren – sie werden in der Reihenfolge abgearbeitet, wie sie in der ORDER BY-Klausel stehen. Auch berechnete Werte oder Ausdrücke lassen sich sortieren, beispielsweise Gesamtpreise oder andere abgeleitete Spalten. Achte zudem auf das Verhalten von NULL-Werten, die je nach Datenbank am Anfang oder Ende der Sortierung erscheinen können. Schließlich lohnt es sich, die Performance im Blick zu behalten: Indexe auf den sortierten Spalten und die gezielte Auswahl der benötigten Spalten sorgen dafür, dass Abfragen effizient bleiben.