Premium

Sortierung, der ORDER BY-Operator

Bei einer SELECT-Query werden Zeilen standardmäßig in einer nicht festgelegten Reihenfolge zurückgegeben. Die tatsächliche Reihenfolge hängt vom Join- und Scan-Plan sowie von der Anordnung der Daten auf der Festplatte ab — verlassen darfst du dich darauf also nicht. Für die geordnete Ausgabe nutzt du die Konstruktion ORDER BY.

Allgemeine Struktur einer Query mit ORDER BY

MySQL 8.1
SELECT tabellen_felder FROM tabellen_name
WHERE ...
ORDER BY spalte_1 [ASC | DESC][, spalte_n [ASC | DESC]]

Dabei steht ASC bzw. DESC für die Sortierrichtung:

  • ASC — aufsteigend (Standard)
  • DESC — absteigend

Holen wir uns zum Beispiel die Namen der Airlines aus der Tabelle Company in alphabetischer Reihenfolge:

MySQL 8.1
SELECT name FROM Company ORDER BY name;
name
Aeroflot
air_France
British_AW
Dale_avia
Don_avia

Auf- und absteigende Sortierung für die wichtigsten Datentypen

DatentypASC (aufsteigend)DESC (absteigend)
StringtypLexikografische (alphabetische) Reihenfolge von „A“ bis „Z“ (bzw. von „А“ bis „Я“)

Zuerst kommen Einträge mit „a“, dann mit „b“ usw.
Lexikografische Reihenfolge von „Z“ bis „A“ (bzw. von „Я“ bis „А“)

Zuerst kommen Einträge mit „z“, „y“ usw.
ZahlentypVom kleineren zum größeren WertVom größeren zum kleineren Wert
Datum und ZeitVom früheren Datum/Zeit zum späteren

Zum Beispiel zuerst 01.01.2024, dann 01.02.2024
Vom späteren Datum/Zeit zum früheren

Zum Beispiel zuerst 01.02.2024, dann 01.01.2024
Boolescher TypFalse steht vor TrueTrue steht vor False
NULL-WerteNULL-Werte stehen zuerstNULL-Werte stehen am Ende
DatentypASC (aufsteigend)DESC (absteigend)
StringtypLexikografische (alphabetische) Reihenfolge von „A“ bis „Z“ (bzw. von „А“ bis „Я“)

Zuerst kommen Einträge mit „a“, dann mit „b“ usw.
Lexikografische Reihenfolge von „Z“ bis „A“ (bzw. von „Я“ bis „А“)

Zuerst kommen Einträge mit „z“, „y“ usw.
ZahlentypVom kleineren zum größeren WertVom größeren zum kleineren Wert
Datum und ZeitVom früheren Datum/Zeit zum späteren

Zum Beispiel zuerst 01.01.2024, dann 01.02.2024
Vom späteren Datum/Zeit zum früheren

Zum Beispiel zuerst 01.02.2024, dann 01.01.2024
Boolescher Typfalse steht vor truetrue steht vor false
NULL-WerteNULL-Werte stehen am EndeNULL-Werte stehen zuerst

Sortierung nach mehreren Spalten

Um nach zwei oder mehr Spalten zu sortieren, listest du sie durch Kommas getrennt auf.

MySQL 8.1
...ORDER BY spalte_1 [ASC | DESC], spalte_2 [ASC | DESC];

Die Daten werden nach der ersten Spalte sortiert. Treffen mehrere Zeilen mit demselben Wert in der ersten Spalte aufeinander, werden sie nach der zweiten Spalte sortiert. Die Anzahl der Spalten, nach denen du sortieren kannst, ist nicht begrenzt.

Die Sortierrichtung gilt nur für die unmittelbar davor stehende Spalte.

ORDER BY spalte_1, spalte_2 DESC

ist nicht dasselbe wie

ORDER BY spalte_1 DESC, spalte_2 DESC

Holen wir die Flugdaten aus der Tabelle Trip, sortiert nach Abflugstadt aufsteigend und nach Ankunftsstadt absteigend:

MySQL 8.1
SELECT DISTINCT town_from, town_to FROM Trip
ORDER BY town_from, town_to DESC;
town_fromtown_to
LondonSingapore
LondonParis
MoscowRostov
ParisRostov
RostovVladivostok
RostovParis
RostovMoscow
SingaporeLondon
VladivostokRostov

In diesem Beispiel werden die Einträge zuerst nach dem Feld town_from sortiert. Anschließend wird innerhalb der Gruppen mit gleichem town_from die absteigende Sortierung nach town_to angewendet.

Sortierung in Aktion