Ergebnisseiten mit OFFSET
Ein Shop mit Tausenden von Spielen zeigt nicht alle auf einmal. Er zeigt zum Beispiel zwanzig pro Seite, mit Schaltflächen für die nächsten Seiten. In SQL machst du Seiten mit OFFSET, das die angegebene Anzahl von Zeilen überspringt, bevor LIMIT zu zählen beginnt:
SELECT name, stadt
FROM kunden
ORDER BY name
LIMIT 5 OFFSET 5;| name | stadt |
|---|---|
| Jonas Hartmann | Leipzig |
| Leon Wagner | Hamburg |
| Lukas Neumann | Leipzig |
| Max Krause | Berlin |
| Mia Lange | Berlin |
Das ist die zweite Seite der Kunden, fünf pro Seite: OFFSET 5 überspringt die ersten fünf (Anna Fischer bis Ida Zimmermann), und LIMIT 5 zeigt die nächsten fünf. Die erste Seite hat OFFSET 0, was dasselbe ist wie gar kein OFFSET, und die dritte Seite hat OFFSET 10. Allgemein überspringt eine Seite die Zeilen aller Seiten vor ihr: (Nummer der Seite − 1) × Anzahl der Zeilen pro Seite.
Die letzte Seite kann kürzer sein. Der Shop hat 14 Kunden, also hat die dritte Seite nur vier. Und wenn OFFSET alle Zeilen überspringt, ist das Ergebnis leer: nur die Namen der Spalten.
Seiten brauchen eine Sortierung, die genau eine Reihenfolge ergibt. Bei einem Gleichstand könnte die Datenbank eine der beiden Zeilen am Ende der ersten Seite und noch einmal am Anfang der zweiten zeigen und eine andere auf keiner von beiden. Deshalb sortiert man Seiten nach etwas, das sich nicht wiederholt, oder mit einer Spalte wie id als letzter Sortierspalte.
SQLite versteht auch eine kürzere Schreibweise, LIMIT 5, 5, aber Vorsicht: Dort steht die Anzahl der zu überspringenden Zeilen zuerst, also überspringt LIMIT 10, 5 zehn Zeilen und zeigt fünf. Das verwechselt man leicht, deshalb schreibt dieser Kurs OFFSET.
So schreibst du es:
Anweisungen
- 1
Die Abfrage im Editor zeigt die erste Seite des Katalogs des Shops: die Spiele nach Titel sortiert, vier pro Seite. Ändere sie so, dass sie die dritte Seite zeigt:
titel preis Lost Temple 20 Moon Farm 20 Mystery Manor 25 Ocean Deep 15 - 2
Füge darunter eine Abfrage hinzu, die den Titel und den Preis von nur einem Spiel zeigt: dem zweitteuersten.
titel preis Goal Rush 50