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 BYaussieht - wie du auf- und absteigend sortieren kannst (
ASCundDESC) - 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.
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-IDname– Name des Produktskategorie– Produktkategoriepreis– Preis des Produktsbewertung– 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 BYanzugeben.
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 mitORDER 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.
Warum deine SQL-Abfrage keine Ergebnisse liefert – 5 häufige Ursachen
Du hast deine SQL-Abfrage geschrieben, sie läuft ohne Fehlermeldung durch...
Artikel lesenCAST, CONVERT & Co.: So meisterst du Datentypkonvertierungen in SQL
Daten liegen in SQL-Datenbanken in unterschiedlichen Formaten vor – etwa...
Artikel lesenKommentare in SQL: Warum und wie du deine Abfragen dokumentierst
Du öffnest eine SQL-Abfrage von vor sechs Monaten – und...
Artikel lesenWas sind eigentlich Datenbanken und Tabellen?
Im Alltag sammeln sich überall Informationen an: Kundendaten im Onlineshop,...
Artikel lesen