Nach mehreren Spalten sortieren
Manche Spiele kosten gleich viel: Pixel Racer, Ocean Deep und Bakery Story kosten alle 15 €. Wenn du nach dem Preis sortierst, sind sie ein Gleichstand, und in welcher Reihenfolge sie kommen, entscheidet die Datenbank. Genau wie die Reihenfolge der Zeilen ohne ORDER BY ist sie nicht garantiert.
Um Gleichstände aufzulösen, füge nach einem Komma eine zweite Spalte hinzu. Die Zeilen werden nach der ersten Spalte sortiert und die Zeilen mit demselben Wert darin nach der zweiten:
SELECT titel, preis
FROM spiele
ORDER BY preis, titel;| titel | preis |
|---|---|
| Cube Logic | 5 |
| Word Quest | 10 |
| Bakery Story | 15 |
| Ocean Deep | 15 |
| Pixel Racer | 15 |
| … | … |
Jetzt kommen die drei Spiele für 15 € in alphabetischer Reihenfolge. Reichen zwei Spalten nicht, füge eine dritte hinzu, und so weiter. Eine Spalte, deren Werte sich nie wiederholen, wie id, löst jeden Gleichstand ganz sicher auf.
Jede Spalte hat ihre eigene Richtung. DESC gilt nur für die Spalte, hinter der es steht: ORDER BY preis DESC, titel sortiert die Preise vom höchsten an, aber Spiele mit demselben Preis weiterhin von A bis Z. Um beide Spalten absteigend zu sortieren, schreibe DESC hinter jede von ihnen: ORDER BY preis DESC, titel DESC.
Typischer Fehler: zu erwarten, dass ein DESC am Ende für alle Spalten gilt. In ORDER BY altersfreigabe, titel DESC gehen die Altersfreigaben weiterhin vom niedrigsten an; nur die Titel von Spielen mit derselben Freigabe gehen von Z bis A.
Du kannst auch nach einer Spalte sortieren, die die Abfrage nicht zeigt. Diese Abfrage listet nur die Namen der Kunden auf, vom zuletzt beigetretenen an. Es ist dieselbe Reihenfolge wie in deiner zweiten Abfrage in der vorigen Übung, nur ohne die Daten:
SELECT name
FROM kunden
ORDER BY beigetreten DESC;| name |
|---|
| Max Krause |
| Sophie Arnold |
| Hannes Schulz |
| … |
So schreibst du es:
Anweisungen
- 1
Zeige den Namen und die Stadt jedes Kunden, sortiert nach der Stadt, und die Kunden aus derselben Stadt nach dem Namen. Die Kunden ohne Stadt kommen zuerst:
name stadt Anna Fischer NULL Hannes Schulz NULL Max Krause Berlin Mia Lange Berlin … … - 2
Zeige darunter das Genre, den Titel und den Preis jedes Spiels, sortiert nach dem Genre von A bis Z und die Spiele jedes Genres vom teuersten an:
genre titel preis Action Robot Rebellion 40 Action Star Pilots 35 Action Zombie Town 30 … … … - 3
Zeige zum Schluss die ID des Kunden und die ID jeder Bestellung (die Spalten
kunde_idundidvonbestellungen, in dieser Reihenfolge). Sortiere die Bestellungen nach der ID des Kunden und die Bestellungen jedes Kunden von der neuesten an. Die Spaltebestellt_amentscheidet, aber zeige sie nicht:kunde_id id 1 26 1 14 1 4 1 1 … …