ORDER BY, LIMIT und DISTINCT
Kurz gesagt: ORDER BY sortiert das Ergebnis, LIMIT und OFFSET nehmen einen Teil davon, und DISTINCT entfernt doppelte Zeilen.
Problem
Die Top 3 für das Schaufenster
Der Inhaber will die drei teuersten Produkte auf der Startseite. Du weißt, wie du Name und Preis holst. Aber in welcher Reihenfolge kommen die Zeilen, und wie nimmst du nur drei?
Die Idee
ORDER BY
ORDER BY sortiert das Ergebnis. Standardmäßig vom Kleinen zum Großen:
DESC kehrt es um, vom Großen zum Kleinen:
Du kannst nach mehreren Spalten sortieren: erst nach der ersten, und bei Gleichstand nach der zweiten. Kunden nach Stadt, und innerhalb einer Stadt nach Name:
Text wird alphabetisch sortiert, Datumsangaben wie 2026-10-19 nach der Zeit.
Genauer, für Neugierige
Ohne ORDER BY ist die Reihenfolge der Zeilen nicht versprochen. Oft kommt sie nach id heraus, aber das ist ein Zufall davon, wie die Datenbank die Tabelle gelesen hat. Nach einer Änderung an der Tabelle oder mit einem neuen Index kann sich die Reihenfolge ändern. Wenn dir die Reihenfolge wichtig ist, schreib ORDER BY.
Die Idee
LIMIT: nur die ersten
LIMIT n liefert die ersten n Zeilen des Ergebnisses. Zusammen mit ORDER BY ergibt das eine Top-N-Liste:
LIMIT läuft zuletzt, nach dem Sortieren. Deshalb stimmt „die drei teuersten“. Ohne ORDER BY wären es drei zufällige Produkte.
OFFSET überspringt Zeilen. So entstehen Seiten: die zweite Seite der Bestellungen, 10 pro Seite:
Probier es aus
Die neuen Kunden
Zeige Name und Anmeldedatum der fünf neuesten Kunden, den neuesten zuerst.
Lösung
SELECT name, joined_at FROM customers
ORDER BY joined_at DESC
LIMIT 5;ORDER BY joined_at DESC LIMIT 5. Hier prüft die Kontrolle auch die Reihenfolge der Zeilen.
Die Idee
DISTINCT: ohne Wiederholungen
Aus welchen Städten sind die Kunden? Mit SELECT city wiederholt sich jede Stadt so oft, wie sie Kunden hat. DISTINCT entfernt die Wiederholungen:
Sechs Städte und NULL: Boris hat keine Stadt, und dieses Fehlen ist auch ein eigenes Ergebnis.
Probier es aus
Die Bestellstatus
Zeige alle verschiedenen Bestellstatus in alphabetischer Reihenfolge.
Lösung
SELECT DISTINCT status FROM orders ORDER BY status;SELECT DISTINCT status FROM orders ORDER BY status. Fünf Status: von cancelled bis shipped.
Übung
Günstig und auf Lager
Zeige Name, Preis und Lagerbestand der fünf günstigsten Produkte, die auf Lager sind, das günstigste zuerst.
Lösung
SELECT name, price, stock FROM products
WHERE stock > 0
ORDER BY price
LIMIT 5;WHERE stock > 0 ORDER BY price LIMIT 5. Die Reihenfolge der Teile zählt: WHERE, dann ORDER BY, zuletzt LIMIT. Produkte, die ausverkauft sind, bleiben draußen, auch wenn sie günstiger sind.
Genauer, für Neugierige
Wohin kommen NULL beim Sortieren? In SQLite und MySQL setzt ORDER BY city sie nach vorn; in PostgreSQL und Oracle kommen sie zuletzt. Wenn es darauf ankommt, sag es: ORDER BY city NULLS LAST. SQLite versteht das seit Version 3.30.
Test
Teste dich
Verwandte Lektionen
Abschnitt „Verwandte Lektionen“- Baut auf: SELECT: Spalten auswählen · WHERE: Zeilen filtern · NULL: kein Wert
- Geht weiter in: Rechnen in einer Abfrage · Datumsfunktionen · CASE und fehlende Werte · Aggregatfunktionen: COUNT, SUM, AVG
- Aufgaben zum Thema: Daten lesen