Sortieren mit ORDER BY
In dieser Lektion lernst du, die Zeilen eines Ergebnisses zu ordnen, nur einige von ihnen zu zeigen und neue Spalten zu berechnen. Bisher kamen die Zeilen in der Reihenfolge, in der die Datenbank sie lieferte. Ein Shop will sie aber meist in einer bestimmten Reihenfolge haben: die billigsten Spiele zuerst, die neuesten Bestellungen oben, die Kunden in alphabetischer Reihenfolge. Dafür gibt es ORDER BY. Es steht am Ende der Abfrage, nach FROM, gefolgt von der Spalte, nach der sortiert wird:
SELECT titel, preis
FROM spiele
ORDER BY preis;| titel | preis |
|---|---|
| Cube Logic | 5 |
| Word Quest | 10 |
| Pixel Racer | 15 |
| Ocean Deep | 15 |
| … | … |
Die Zeilen sind aufsteigend sortiert, vom kleinsten Wert zum größten. Was „am kleinsten“ bedeutet, hängt davon ab, was in der Spalte steht:
- Zahlen werden nach ihrem Wert sortiert: 5, 10, 15, 20.
- Text wird alphabetisch sortiert, Buchstabe für Buchstabe:
Emma Beckerkommt vorGreta HoffmannundLeon WagnervorLukas Neumann. SQLite vergleicht die Zeichen anhand ihrer Codes, und in denen kommen alle Großbuchstaben vor allen Kleinbuchstaben. Deshalb steht das GenreRPGvorRennspiel:Pist ein Großbuchstabe,enicht. - Datumsangaben werden als Text im Format
JJJJ-MM-TTgespeichert: das Jahr, der Monat und der Tag, wie2024-03-14, immer mit zwei Ziffern für Monat und Tag. Text wird von links verglichen, also entscheidet zuerst das Jahr, dann der Monat, dann der Tag, und die alphabetische Reihenfolge ist auch die zeitliche. Genau deshalb schreiben Datenbanken Daten so:14.3.2024würde nicht richtig sortieren. NULLgilt in SQLite als kleiner als jeder Wert, also kommen die Zeilen mitNULLzuerst. (Manche anderen Datenbanken, wie PostgreSQL, stellen sie ans Ende.)
Ohne ORDER BY ist die Reihenfolge der Zeilen nicht garantiert. Meist liefert SQLite sie in der Reihenfolge ihrer IDs, aber nicht immer. Führe SELECT email FROM kunden; aus, und die E-Mail-Adressen kommen in alphabetischer Reihenfolge. Das liegt daran, dass SQLite die E-Mail-Adressen auch in einer eigenen sortierten Liste führt, mit der es prüft, dass keine zwei Kunden dieselbe Adresse haben. (Sie heißt Index, und Indizes lernst du am Ende des Kurses kennen.) Wenn du nur nach den E-Mail-Adressen fragst, ist es schneller, diese kurze Liste zu lesen als die ganze Tabelle. Frag auch nach den Namen (SELECT name, email FROM kunden;), und die Zeilen kommen wieder in der Reihenfolge der IDs. Die Datenbank wählt immer den Weg, den sie für den schnellsten hält, und der kann sich mit der Abfrage, mit den Daten oder mit einer anderen Datenbank ändern. Wenn die Reihenfolge wichtig ist, schreibe also ORDER BY.
Typischer Fehler: ORDER BY an der falschen Stelle. Die Teile einer Abfrage stehen in fester Reihenfolge: SELECT, dann FROM, und ORDER BY am Ende. Eine Abfrage, in der sie durcheinander sind, endet mit einem Fehler:
SELECT titel, preis
ORDER BY preis
FROM spiele;Error on line 1: near "FROM": syntax errorSo schreibst du es:
Anweisungen
- 1
Zeige den Namen und die Stadt jedes Kunden, sortiert nach dem Namen. Das Ergebnis beginnt so:
name stadt Anna Fischer NULL Emma Becker Hamburg Greta Hoffmann Hamburg … … - 2
Füge darunter eine Abfrage hinzu, die den Titel und das Erscheinungsdatum (
erschienen) jedes Spiels zeigt, vom ältesten an. Die zwei Spiele, die noch nicht erschienen sind, haben dortNULL, also kommen sie zuerst:titel erschienen Robot Rebellion NULL Mystery Manor NULL Cube Logic 2020-02-11 Castle Siege 2021-05-20 … …