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_columnFROM tableORDER 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, pointsFROM furniture_dataORDER 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, pointsFROM furniture _dataORDER BY furniture ASC ;
Denken Sie daran, dass Sie das Schlüsselwort ASC nicht brauchen, um eine aufsteigende Sortierung anzugeben; SQL tut dies standardmäßig.
Wie funktioniert die GROUP BY-Klausel von SQL, wenn #NULL-Werte beteiligt sind? Finden Sie es heraus! https://t.co/yaTfYvwVix pic.twitter.com/ELx0AiLnnN
See AlsoWas bewirkt ORDER BY?SQL ORDER BY: output sorteren [TUTORIAL]How to Sort in SQL: Mastering ORDER BY for Efficient Queries - SQL Knowledge CenterClause SQL ORDER BY avec 7 exemples- Vertabelo (@Vertabelo) April 29, 2017
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, pointsFROM furniture _dataORDER 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, pointsFROM furniture _dataORDER 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, priceFROM furniture _dataORDER 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).
Wenn Sie einer SELECT-Anweisung eine IF-THEN-Logik hinzufügen müssen, ist CASE da, um zu helfen -> https://t.co/EMwAZDO2T5 #SQL #SQLServer #SQLTip pic.twitter.com/dPHNp6IsjS
- Vertabelo (@Vertabelo) May 8, 2017
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, pointsFROM furniture _dataORDER 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, pointsFROM furniture _dataORDER 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, pointsFROM furniture _dataORDER 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.