Level 4: Sortieren, begrenzen, Duplikate entfernen
Aktualisiert am
Anfänger · Level 4 von 20. Ziel: Ergebnisse in der gewünschten Reihenfolge zeigen, nur die ersten behalten und Duplikate entfernen.
Themen: ORDER BY ASC DESC LIMIT OFFSET DISTINCT
Lektion
Ohne ORDER BY ist die Reihenfolge der Ergebniszeilen nicht garantiert: Sie mag stabil wirken, kann sich aber von einer Ausführung oder Engine-Version zur nächsten ändern. Sobald die Reihenfolge wichtig ist, schreibt man sie hin.
ORDER BY Spalte sortiert vom kleinsten zum größten Wert: Das ist ASC, die Standardsortierung. Bei Texten ist es die alphabetische Reihenfolge, bei Datumsangaben im Format 'JJJJ-MM-TT' die chronologische. DESC sortiert vom größten zum kleinsten Wert.
Man kann nach mehreren Spalten sortieren: Die zweite dient nur dazu, Gleichstände der ersten aufzulösen. ORDER BY department, salary DESC ordnet die Angestellten nach Abteilung und innerhalb jeder Abteilung vom bestbezahlten zum am schlechtesten bezahlten. Jede Spalte hat ihre eigene Sortierrichtung.
LIMIT n behält nur die ersten n Zeilen, nach dem Sortieren. So erhält man ein Podium: ORDER BY rating DESC LIMIT 3. OFFSET k überspringt zuerst k Zeilen: LIMIT 1 OFFSET 1 liefert die zweite Zeile. Ohne ORDER BY behält LIMIT beliebige Zeilen.
SELECT DISTINCT entfernt doppelte Zeilen aus dem Ergebnis. Es gilt für die ganze Zeile: SELECT DISTINCT city, country behält jedes unterschiedliche Paar (Stadt, Land).
NULL-Werte haben keinen natürlichen Platz in einer Sortierung. SQLite setzt sie bei aufsteigender Sortierung an den Anfang und bei absteigender ans Ende; PostgreSQL macht es umgekehrt. Um zu wählen, schreibt man NULLS FIRST oder NULLS LAST: ORDER BY director_id NULLS LAST.
Schreibreihenfolge der Klauseln: SELECT, FROM, WHERE, ORDER BY, LIMIT. ORDER BY wird nach SELECT ausgeführt: Anders als WHERE kann es daher einen Alias verwenden.
Syntax
SELECT DISTINCT spalten
FROM meine_tabelle
WHERE …
ORDER BY spalte DESC
LIMIT 3 OFFSET 0;Kommentiertes Beispiel
SELECT title, rating
FROM movies
ORDER BY rating DESC
LIMIT 3;Wir sortieren nach absteigender Bewertung und behalten die ersten 3 Zeilen: das Film-Podium.
| id | title | genre | year | duration | rating | director_id |
|---|---|---|---|---|---|---|
| 1 | Night Train | Thriller | 2015 | 118 | 7.8 | 1 |
| 2 | Blue Harbor | Drama | 2018 | 102 | 7.1 | 2 |
| 3 | Paper Moon City | Comedy | 2012 | 95 | 6.4 | 5 |
| 4 | Silent Peak | Drama | 2020 | 131 | 8.2 | 3 |
| 5 | Last Signal | Sci-Fi | 2019 | 142 | 7.5 | 1 |
| 6 | Summer Keys | Comedy | 2016 | 88 | 5.9 | 4 |
| 7 | Iron Garden | Sci-Fi | 2021 | 125 | 8 | 3 |
| 8 | Dust and Gold | Western | 2014 | 110 | 6.8 | 2 |
| 9 | The Quiet Hour | Drama | 2022 | 97 | 7.4 | 5 |
| 10 | Deep Current | Thriller | 2017 | 105 | 6.9 | NULL |
Ergebnis des Beispiels
| title | rating |
|---|---|
| Silent Peak | 8.2 |
| Iron Garden | 8 |
| Night Train | 7.8 |
Das Wichtigste
- ASC (aufsteigend) ist die Standardsortierung, DESC die absteigende.
- Reihenfolge der Klauseln: SELECT, FROM, WHERE, ORDER BY, LIMIT.
- DISTINCT steht direkt nach SELECT.
Häufige Fallen
- LIMIT ohne ORDER BY liefert Zeilen „zufällig“.
- Füge bei Gleichstand eine zweite Sortierspalte hinzu, um eine stabile Reihenfolge zu erhalten.
- In SQLite stehen NULL-Werte bei aufsteigender Sortierung vorne: Filtere sie heraus oder füge NULLS LAST hinzu.
Die 5 Übungen des Levels
- Zeige den Titel und das Jahr der Filme, vom ältesten zum neuesten.
- Zeige die Liste der Filmgenres ohne Duplikate.
- Zeige den Titel und die Regisseur-ID (director_id) jedes Films, aufsteigend nach ID sortiert, mit den Filmen ohne Regisseur am Ende. Bei gleicher ID sortiere nach Titel.
- Zeige den Namen, die Abteilung und das Gehalt der Mitarbeitenden, sortiert nach Abteilung (alphabetisch), dann nach absteigendem Gehalt, dann nach Name.
- Zeige die Fluggesellschaft, das Ziel und den Preis des zweitgünstigsten Flugs ab 'CDG'.
In SpeedQL wird jede Abfrage sofort geprüft: Ihr Ergebnis wird mit dem erwarteten verglichen, dann läuft die Abfrage noch einmal auf einer versteckten Kontrolldatenbank. Zu jeder Übung gibt es schriftliche Hinweise, die du nur bei Bedarf aufrufst.
Die Übungen von Level 4 machen
Kostenlos und ohne Anmeldung: Die Lektion und die 5 Übungen öffnen sich direkt in deinem Browser.
← Vorheriges Level: Bedingungen kombinieren · Nächstes Level: Eine Tabelle zusammenfassen: Aggregate →