Zurück zur Artikelliste Artikel
7 Leseminuten

Wie man Datensätze mit der ORDER BY-Klausel sortiert

Relationale Datenbanken speichern Datensätze nicht in alphabetischer, numerischer, aufsteigender oder in einer anderen Reihenfolge. Die einzige Möglichkeit, Datensätze in der Ergebnismenge zu ordnen, ist die ORDER BY Klausel. Sie können diese Klausel verwenden, um Zeilen nach einer Spalte, einer Liste von Spalten oder einem Ausdruck zu ordnen. Sie können Zeilen auch mithilfe des CASE-Ausdrucks ordnen.

In diesem Beitrag werfen wir einen Blick auf die ORDER BY Klausel - wie man sie schreibt, wie sie funktioniert und was sie bewirkt.

ORDER BY-Syntax

Die ORDER BY Klausel wird verwendet, um Zeilen in einer Ergebnistabelle zu sortieren. Hier ist ihre Syntax:

SELECT list_column
FROM table
ORDER BY column ;

Verwendung von ORDER BY mit einer Spalte

Das folgende Beispiel zeigt Datensätze in der Tabelle furniture_data die in aufsteigender Reihenfolge nach der Spalte furniture sortiert wurden. Aufsteigend ist die Standardsortierreihenfolge in einer ORDER BY Klausel.

SELECT id, furniture, points
FROM furniture_data
ORDER BY furniture ;

Wie Sie sehen können, steht die ORDER BY Klausel nach der FROM Anweisung. Nach dem Schlüsselwort ORDER BY folgt die Spalte oder die Spalten, nach denen die Zeilen sortiert werden sollen. Mit anderen Worten, Sie teilen der Datenbank mit: "Nehmen Sie die Spalten id, furniture und points aus der Tabelle furniture_data Tabelle und ordne sie nach der Spalte furniture".

Sie können angeben, wie die Ergebnisse sortiert werden sollen, entweder in aufsteigender (A-Z) oder absteigender (Z-A) Reihenfolge. Für die aufsteigende Reihenfolge können Sie das Schlüsselwort ASC verwenden, aber es ist nicht notwendig. Für die absteigende Reihenfolge müssen Sie das Schlüsselwort DESC verwenden.

Nach dem Spaltennamen können Sie also das Schlüsselwort ASC oder DESC einfügen. Das folgende Beispiel sortiert die Daten in aufsteigender Reihenfolge nach der Spalte "furniture":

SELECT id, furniture, points
FROM furniture _data
ORDER BY furniture ASC ;

Denken Sie daran, dass Sie das Schlüsselwort ASC nicht brauchen, um eine aufsteigende Sortierung anzugeben; SQL tut dies standardmäßig.

Als nächstes sehen Sie sich die Daten in der Tabelle furniture_data an, die wir in den verbleibenden Beispielen dieses Artikels verwenden werden:

id furniture points price
1 chair 5 120
2 sofa 8 950
3 table 2 1350
4 bookcase 5 200
5 bed 3 2000

So sieht es nach einer aufsteigenden Sortierung nach der Spalte furniture aus:

id furniture points
5 bed 3
4 bookcase 5
1 chair 5
2 sofa 8
3 table 2

Was ist mit einer absteigenden Sortierung nach der gleichen Spalte?

SELECT id, furniture, points
FROM furniture _data
ORDER BY furniture DESC ;

Hier ist das Ergebnis für die absteigende Sortierung:

id furniture points
3 table 2
2 sofa 8
1 chair 5
4 bookcase 5
5 bed 3

Verwendung von ORDER BY mit mehreren Spalten

In den letzten Beispielen wurden die Daten nach nur einer Spalte sortiert. Wenn jedoch einige Datensätze in dieser Spalte identische Werte haben, könnte dies die Anzeige der Ergebnisse beeinflussen. In diesem Fall müssen wir die Zeilen anhand einer zusätzlichen Spalte sortieren. Das nächste Beispiel zeigt, wie man mehr als eine Spalte zur Sortierung von Daten verwenden kann:

SELECT id, furniture, points
FROM furniture _data
ORDER BY point DESC , furniture;

In diesem Beispiel werden die Zeilen in absteigender Reihenfolge nach der Spalte points sortiert. Wenn zwei oder mehr Datensätze denselben Wert haben, verwendet die Datenbank die Spalte furniture, um diese Datensätze in aufsteigender Reihenfolge zu sortieren.

Hier sind die Ergebnisse:

id furniture points
2 sofa 8
4 bookcase 5
1 chair 5
5 bed 3
3 table 2

Die Zeilen "Bücherregal" und " Stuhl" haben die gleiche Punktzahl (5), also werden auch diese Zeilen nach den Werten in der Spalte furniture sortiert. Die Sortierung ist alphabetisch, so dass die Bücherregal Zeile wird vor der Stuhl Zeile.

Ausdrücke in der ORDER BY-Klausel

Manchmal müssen wir Datensätze nach dem Ergebnis einer Berechnung und nicht nach den Spaltenwerten sortieren. Stellen Sie sich vor, Sie möchten die Daten aus der Tabelle furniture_data Tabelle abgerufenen Daten nach der Höhe eines Preisnachlasses sortieren. Sie würden den Rabatt berechnen, indem Sie den Wert in der Spalte points mit 120 multiplizieren und dann durch 100 dividieren.

So würde dies im SQL-Code aussehen:

SELECT id, furniture, points, price
FROM furniture _data
ORDER BY price-120*points/100;

Hier ist das Ergebnis:

id furniture points price
1 chair 5 120
4 bookcase 5 200
2 sofa 8 950
3 table 2 1350
5 bed 3 2000

Verwendung von ORDER BY mit CASE

Sortieren mit dem CASE-Ausdruck

Neben der Sortierung von Zeilen anhand einer oder mehrerer Spalten können Sie ORDER BY auch mit einfachen und gesuchten CASE-Ausdrücken verwenden. (Um mehr über CASE zu erfahren, lesen Sie diesen Artikel.) Warum CASE in einer ORDER BY Klausel verwenden? Vielleicht möchten Sie noch genauer festlegen, wie die Zeilen sortiert werden sollen, oder Sie möchten nur einige der Zeilen abrufen (d. h. diejenigen, die bestimmte Bedingungen erfüllen).

Das folgende Beispiel zeigt, wie Sie CASE verwenden können, um Daten auf eine bestimmte Weise zu sortieren. Stellen Sie sich vor, Sie wollen Daten aus der Tabelle furniture_data abrufen möchten, aber die Zeilen mit einer geraden Anzahl von Punkten oben in den Ergebnissen angezeigt werden sollen. Sie können dies nicht mit Spalten als Sortierkriterien erreichen; Sie brauchen CASE.

Unten ist ein Beispiel für den entsprechenden Code zu sehen:

SELECT id, furniture, points
FROM furniture _data
ORDER BY CASE 
              WHEN points%2=0  THEN 1
              ELSE 2
         END ;

So sehen die Ergebnisse aus:

id furniture points
2 sofa 8
3 table 2
1 chair 5
4 bookcase 5
5 bed 3

Wie hat der Ausdruck CASE dies erreicht? Er prüft, ob die Zahl in der Spalte points durch 2 geteilt werden kann, ohne dass ein Rest übrig bleibt. Wenn ja, wurde ein 1 zurückgegeben und die Zeile wurde im oberen Teil der Ergebnisse angezeigt. Wenn nicht, wurde ein 2 zurückgegeben, und die Zeile wurde im unteren Teil der Ergebnisse angezeigt.

Wenn Sie möchten, dass die Möbeldatensätze mit einer ungeraden Anzahl von Punkten zuerst aufgelistet werden, müssen Sie nur die Sortierreihenfolge auf absteigend ändern:

SELECT id, furniture, points
FROM furniture _data
ORDER BY CASE 
              WHEN points%2=0  THEN 1
              ELSE 2
         END   DESC ;

Das Ergebnis:

id furniture points
1 chair 5
4 bookcase 5
5 bed 3
2 sofa 8
3 table 2

Sortieren mit CASE und einer Spalte

Sie können zusammen mit der Anweisung CASE auch andere Dinge verwenden, z. B. eine Spalte oder sogar einen anderen CASE Ausdruck. Sehen Sie sich das folgende Beispiel an, in dem ein CASE Ausdruck und eine Spalte verwendet werden, um Daten zu sortieren.

SELECT id, furniture, points
FROM furniture _data
ORDER BY CASE 
              WHEN points%2=0  THEN 1
              ELSE 2
         END , furniture  DESC ;

Zunächst werden die Datensätze nach dem CASE Ausdruck geordnet, der prüft, ob die points Werte gerade oder ungerade sind. Wie zuvor werden die geraden Zahlen zuerst aufgeführt. Aber wir wollen die Gruppen noch mehr sortieren. Daher verwenden wir die Spalte furniture, um die Ergebnisse innerhalb der CASE zu ordnen. Da wir das Schlüsselwort DESC verwendet haben, werden die Zeilen in umgekehrter alphabetischer Reihenfolge aufgeführt. Hier sind die Ergebnisse:

id furniture points
3 table 2
2 sofa 8
1 chair 5
4 bookcase 5
5 bed 3

Vergleichen Sie diese Ergebnisse mit denen unten, die nur den Ausdruck CASE verwenden:

id furniture points
2 sofa 8
3 table 2
1 chair 5
4 bookcase 5
5 bed 3

Möchten Sie mehr erfahren?

Dieser Artikel hat Ihnen nur den Einstieg in die ORDER BY Klausel ermöglicht. Am besten lernen Sie mehr, wenn Sie sie selbst ausprobieren, indem Sie den SQL-Abfrage kurs der Vertabelo Academy nutzen.