SELECT TOP / LIMIT
Abfragen verfeinern
Manchmal willst du nicht alle Zeilen einer Abfrage sehen, sondern nur die ersten paar – etwa die fünf umsatzstärksten Kunden oder die zehn teuersten Produkte. Genau dafür gibt es eine Begrenzung der Zeilenanzahl. Leider hat hier jeder Datenbank-Dialekt seine eigene Schreibweise.
Syntax je Dialekt
- SQL Server / MS Access:
SELECT TOP n … - MySQL / PostgreSQL / SQLite:
SELECT … LIMIT n - Standard-SQL (auch Oracle 12c+, PostgreSQL):
FETCH FIRST n ROWS ONLY
Beispiel: Die 3 Kunden mit dem höchsten Umsatz
In MySQL oder PostgreSQL kombinierst du ORDER BY mit LIMIT:
SELECT Name, Umsatz FROM Kunden ORDER BY Umsatz DESC LIMIT 3;
| Name | Umsatz |
|---|---|
| Müller GmbH | 98000 |
| Schmidt AG | 74500 |
| Weber KG | 61200 |
Dasselbe Ergebnis in SQL Server:
SELECT TOP 3 Name, Umsatz FROM Kunden ORDER BY Umsatz DESC;
Und in standardkonformer Schreibweise:
SELECT Name, Umsatz FROM Kunden ORDER BY Umsatz DESC FETCH FIRST 3 ROWS ONLY;
Prozentual begrenzen
SQL Server kann auch einen Prozentsatz liefern: SELECT TOP 50 PERCENT …. In MySQL/PostgreSQL gibt es das nicht direkt – dort hilft ein OFFSET, um z. B. die Treffer 4–6 für eine Seitennummerierung zu holen: LIMIT 3 OFFSET 3.
Stolperfalle
Eine Begrenzung ohne ORDER BY ist nicht deterministisch: Die Datenbank darf dir irgendwelche n Zeilen liefern, nicht zwangsläufig die „obersten“. Willst du wirklich die größten oder kleinsten Werte, sortiere immer explizit mit ORDER BY. Achte außerdem darauf, dass die Begrenzung erst nach Sortierung und Filterung greift.