Der ORDER BY
-Klausel wird häufig in SQL verwendet, um die Ergebnisse einer Abfrage zu sortieren.
Damit können Sie die Reihenfolge angeben, in der die Ergebnisse zurückgegeben werden.
Sie können festlegen, ob die Ergebnisse in aufsteigender oder absteigender Reihenfolge sortiert werden. Sie können auch mehrere Spalten zum Sortieren angeben.
Beispiel
Hier ist ein Beispiel, um den ORDER BY
zu demonstrieren Klausel.
SELECT
VendorId,
ProductName,
ProductPrice
FROM Products
ORDER BY VendorId ASC;
Ergebnis:
+------------+---------------------------------+----------------+ | VendorId | ProductName | ProductPrice | |------------+---------------------------------+----------------| | 1001 | Left handed screwdriver | 25.99 | | 1001 | Long Weight (blue) | 14.75 | | 1001 | Long Weight (green) | 11.99 | | 1002 | Sledge Hammer | 33.49 | | 1003 | Chainsaw | 245.00 | | 1003 | Straw Dog Box | 55.99 | | 1004 | Bottomless Coffee Mugs (4 Pack) | 9.99 | +------------+---------------------------------+----------------+
Der ASC
Teil bedeutet aufsteigend . Wenn Sie den ORDER BY
verwenden -Klausel, ist sie standardmäßig aufsteigend, sodass Sie ASC
weglassen können Teil, wenn Sie möchten.
Wir könnten die Abfrage also auch so schreiben:
SELECT
VendorId,
ProductName,
ProductPrice
FROM Products
ORDER BY VendorId;
Absteigende Reihenfolge
Um es absteigend zu sortieren verwenden Sie DESC
.
SELECT
VendorId,
ProductName,
ProductPrice
FROM Products
ORDER BY VendorId DESC;
Ergebnis:
+------------+---------------------------------+----------------+ | VendorId | ProductName | ProductPrice | |------------+---------------------------------+----------------| | 1004 | Bottomless Coffee Mugs (4 Pack) | 9.99 | | 1003 | Chainsaw | 245.00 | | 1003 | Straw Dog Box | 55.99 | | 1002 | Sledge Hammer | 33.49 | | 1001 | Left handed screwdriver | 25.99 | | 1001 | Long Weight (blue) | 14.75 | | 1001 | Long Weight (green) | 11.99 | +------------+---------------------------------+----------------+
Ordnen Sie nach mehreren Spalten
Sie können mehrere Spalten angeben, nach denen sortiert werden soll. Dadurch können Sie angeben, wie die Zeilen sortiert werden sollen, wenn es mehrere Zeilen mit demselben Wert in der ersten sortierten Spalte gibt.
Es ist wahrscheinlich einfacher, dies an einem Beispiel zu demonstrieren.
SELECT
VendorId,
ProductName,
ProductPrice
FROM Products
ORDER BY VendorId DESC, ProductName DESC, ProductPrice DESC;
Ergebnis:
+------------+---------------------------------+----------------+ | VendorId | ProductName | ProductPrice | |------------+---------------------------------+----------------| | 1004 | Bottomless Coffee Mugs (4 Pack) | 9.99 | | 1003 | Straw Dog Box | 55.99 | | 1003 | Chainsaw | 245.00 | | 1002 | Sledge Hammer | 33.49 | | 1001 | Long Weight (green) | 11.99 | | 1001 | Long Weight (blue) | 14.75 | | 1001 | Left handed screwdriver | 25.99 | +------------+---------------------------------+----------------+
Wenn wir uns auf die drei Zeilen mit einer VendorId
konzentrieren von 1001
, können wir sehen, dass das vorherige Beispiel die Produktnamen in aufsteigender Reihenfolge zurückgegeben hat, aber in diesem Beispiel haben wir sie in absteigender Reihenfolge zurückgegeben. Das liegt daran, dass wir den ProductName
nominiert haben als zweite Spalte in unserem ORDER BY
-Klausel, und wir haben DESC
angegeben für absteigende Reihenfolge.
Die zweite Spalte greift nur, wenn es Duplikate in der ersten ORDER BY
gibt Säule. Wenn nicht, sind alle nachfolgenden Spalten für die weitere Sortierung irrelevant.
Wenn wir uns den ProductPrice
ansehen -Spalte sehen wir, dass diese Spalte keine Auswirkung auf die Sortierung hatte, obwohl wir ProductPrice DESC
angegeben haben . Wir können sehen, dass die Preise alle in aufsteigender Reihenfolge sind, obwohl wir darauf bestehen, dass sie in absteigender Reihenfolge sein sollten. Der Grund, warum diese Spalte keine Auswirkung hatte, liegt darin, dass es in der zuvor sortierten Spalte keine Duplikate gab. Daher wirkte sich die Reihenfolge der ersten beiden Spalten auf die Ergebnisse aus, die Reihenfolge der dritten Spalte jedoch nicht.
Das soll nicht heißen, dass die dritte Spalte niemals Wirkung zeigen wird. Wenn wir später einen anderen Left handed screwdriver
eingesetzt haben , aber zu einem anderen Preis als dem ProductPrice
Die Reihenfolge der Spalte würde aufgrund der Tatsache wirksam, dass es doppelte Werte im ProductName
gibt Spalte.
Aufsteigendes mit Absteigendem mischen
Sie können jede Spalte mit aufsteigender und absteigender Reihenfolge mischen. Sie müssen nicht alle gleich sein. Zum Beispiel könnten wir dies tun:
SELECT
VendorId,
ProductName,
ProductPrice
FROM Products
ORDER BY VendorId DESC, ProductName ASC, ProductPrice DESC;
Ergebnis:
+------------+---------------------------------+----------------+ | VendorId | ProductName | ProductPrice | |------------+---------------------------------+----------------| | 1004 | Bottomless Coffee Mugs (4 Pack) | 9.99 | | 1003 | Chainsaw | 245.00 | | 1003 | Straw Dog Box | 55.99 | | 1002 | Sledge Hammer | 33.49 | | 1001 | Left handed screwdriver | 25.99 | | 1001 | Long Weight (blue) | 14.75 | | 1001 | Long Weight (green) | 11.99 | +------------+---------------------------------+----------------+
Ordnen Sie nach Spaltenaliasen
Der ORDER BY
-Klausel akzeptiert Spaltenaliase als eine Spalte, nach der sortiert werden soll.
Zum Beispiel könnten wir dies tun:
SELECT
VendorId AS ID,
ProductName AS Name,
ProductPrice AS Price
FROM Products
ORDER BY ID DESC, Name DESC, Price DESC;
Ergebnis:
+------+---------------------------------+---------+ | ID | Name | Price | |------+---------------------------------+---------| | 1004 | Bottomless Coffee Mugs (4 Pack) | 9.99 | | 1003 | Straw Dog Box | 55.99 | | 1003 | Chainsaw | 245.00 | | 1002 | Sledge Hammer | 33.49 | | 1001 | Long Weight (green) | 11.99 | | 1001 | Long Weight (blue) | 14.75 | | 1001 | Left handed screwdriver | 25.99 | +------+---------------------------------+---------+
Ordnen Sie nach Spalten, die nicht in der SELECT-Liste enthalten sind
Der ORDER BY
-Klausel akzeptiert Spalten, die nicht in SELECT
angegeben sind Liste.
Mit anderen Worten, Sie müssen keine Spalte auswählen, um nach dieser Spalte zu sortieren.
Beispiel:
SELECT
ProductName AS Name,
ProductPrice AS Price
FROM Products
ORDER BY VendorId DESC, Name DESC, Price DESC;
Ergebnis:
+---------------------------------+---------+ | Name | Price | |---------------------------------+---------| | Bottomless Coffee Mugs (4 Pack) | 9.99 | | Straw Dog Box | 55.99 | | Chainsaw | 245.00 | | Sledge Hammer | 33.49 | | Long Weight (green) | 11.99 | | Long Weight (blue) | 14.75 | | Left handed screwdriver | 25.99 | +---------------------------------+---------+
Hier haben wir nach der VendorId
bestellt Spalte, obwohl wir sie nicht in SELECT
aufgenommen haben Liste.
Nach Spalten-ID sortieren
Der ORDER BY
-Klausel akzeptiert auch die Spalten-ID anstelle des Spaltennamens.
Zum Beispiel könnten wir dies tun:
SELECT
VendorId AS ID,
ProductName AS Name,
ProductPrice AS Price
FROM Products
ORDER BY 1 DESC, 2 DESC, 3 DESC;
Ergebnis:
+------+---------------------------------+---------+ | ID | Name | Price | |------+---------------------------------+---------| | 1004 | Bottomless Coffee Mugs (4 Pack) | 9.99 | | 1003 | Straw Dog Box | 55.99 | | 1003 | Chainsaw | 245.00 | | 1002 | Sledge Hammer | 33.49 | | 1001 | Long Weight (green) | 11.99 | | 1001 | Long Weight (blue) | 14.75 | | 1001 | Left handed screwdriver | 25.99 | +------+---------------------------------+---------+
Dies wird jedoch nicht empfohlen.
Erstens macht es die Abfrage für andere schwieriger zu lesen und zu verstehen.
Zweitens, wenn jemand später die Reihenfolge der Spalten im SELECT
geändert hat Liste, müssten sie auch die Reihenfolge von ORDER BY
ändern aufführen. Dies könnte sehr leicht vergessen werden, und die Ergebnisse der Abfrage werden in der falschen Reihenfolge angezeigt.
Hier ist ein Beispiel dafür, was ich meine.
SELECT
ProductName AS Name,
VendorId AS ID,
ProductPrice AS Price
FROM Products
ORDER BY 1 DESC, 2 DESC, 3 DESC;
Ergebnis:
+---------------------------------+------+---------+ | Name | ID | Price | |---------------------------------+------+---------| | Straw Dog Box | 1003 | 55.99 | | Sledge Hammer | 1002 | 33.49 | | Long Weight (green) | 1001 | 11.99 | | Long Weight (blue) | 1001 | 14.75 | | Left handed screwdriver | 1001 | 25.99 | | Chainsaw | 1003 | 245.00 | | Bottomless Coffee Mugs (4 Pack) | 1004 | 9.99 | +---------------------------------+------+---------+
Ich habe lediglich den ProductPrice
verschoben Position der Spalte in SELECT
Liste, und es hat die Reihenfolge der Ergebnisse komplett durcheinander gebracht.
Standardreihenfolge
In SQL, wenn Sie ORDER BY
nicht verwenden -Klausel gibt es keine Garantie, in welcher Reihenfolge Ihre Ergebnisse angezeigt werden. Auch wenn es aussehen kann wie Ihre Datenbank die Ergebnisse nach einer bestimmten Spalte sortiert, ist dies möglicherweise nicht der Fall.
Generell ohne ORDER BY
-Klausel werden die Daten in der Reihenfolge sortiert, in der sie in die Tabelle geladen wurden. Wenn jedoch Zeilen gelöscht oder aktualisiert wurden, wird die Reihenfolge davon beeinflusst, wie das DBMS den zurückgewonnenen Speicherplatz wiederverwendet.
Verlassen Sie sich daher nicht darauf, dass das DBMS die Ergebnisse in einer sinnvollen Reihenfolge sortiert. Wenn Sie möchten, dass Ihre Ergebnisse sortiert werden, verwenden Sie den ORDER BY
Klausel.
Bestellung mit Ausnahmen
Es kann vorkommen, dass Sie eine Ausnahme in Ihren ORDER BY
aufnehmen müssen Klausel.
Sie möchten beispielsweise alphabetisch nach einer Spalte mit Ausnahme einer Zeile sortieren. Möglicherweise möchten Sie, dass eine Zeile (oder mehrere Zeilen) ganz oben angezeigt werden, während alle übrigen Zeilen in einer bestimmten Reihenfolge angeordnet sind.
Glücklicherweise gibt es eine einfache Möglichkeit, dies zu tun. Siehe So schreiben Sie eine ORDER BY-Klausel mit Ausnahmen, wenn Sie dies tun müssen.