- Kategorien:
ORDER BY¶
Gibt eine Reihenfolge der Zeilen in der Ergebnistabelle aus einer SELECT-Liste an.
Syntax¶
SELECT ...
FROM ...
ORDER BY orderItem [ , orderItem , ... ]
[ ... ]
- Wobei:
orderItem ::= { <column_alias> | <position> | <expr> } [ ASC | DESC ] [ NULLS { FIRST | LAST } ]
column_alias
Spaltenalias, der in der Liste SELECT des Abfrageblocks angezeigt wird.
position
Position eines Ausdrucks in der Liste SELECT.
expr
Jeder Ausdruck in Tabellen im aktuellen Bereich.
ASC | DESC
Gibt optional die Werte des Sortierschlüssels in aufsteigender Reihenfolge (niedrigster bis höchster Wert) oder absteigender Reihenfolge (höchster bis niedrigster Wert) zurück.
Standard:
ASC
NULLS FIRST | LAST
Gibt optional an, ob anhand der Sortierreihenfolge (
ASC
oderDESC
) NULL-Werte vor bzw. nach Nicht-NULL-Werten zurückgegeben werden.Standard: Hängt von der Sortierreihenfolge (
ASC
oderDESC
) ab. Weitere Informationen dazu finden Sie in den Nutzungshinweisen unten.
Nutzungshinweise¶
Alle Daten werden anhand des numerischen Bytewerts einzelner Zeichen in der ASCII-Tabelle sortiert. UTF-8-Codierung wird unterstützt.
Bei numerischen Werten haben führende Nullen vor dem Dezimalzeichen und nachstehende Nullen (
0
) nach dem Dezimalzeichen keine Auswirkung auf die Sortierreihenfolge.Wenn nicht anders angegeben, sind NULL-Werte größer als alle Nicht-NULL-Werte. Daher hängt die Reihenfolge für NULLS von der Sortierreihenfolge ab:
Wenn die Sortierreihenfolge
ASC
lautet, werden NULLS zuletzt zurückgegeben; verwenden SieNULLS FIRST
, um NULLS an die erste Stelle zu zwingen.Wenn die Sortierreihenfolge
DESC
lautet, werden NULLS zuerst zurückgegeben. Verwenden SieNULLS LAST
, um NULLS an die letzte Stelle zu zwingen.
Ein ORDER BY kann auf verschiedenen Ebenen einer Abfrage verwendet werden, z. B. in einer Unterabfrage oder in einer OVER()-Unterklausel. Ein ORDER BY innerhalb einer Unterabfrage oder Unterklausel gilt nur innerhalb dieser Unterabfrage oder Unterklausel. Beispielsweise sortiert das ORDER BY in der folgenden Abfrage die Ergebnisse nur innerhalb der Unterabfrage, aber nicht auf der äußersten Ebene der Abfrage:
select * from ( select branch_name from branch_offices ORDER BY monthly_sales DESC limit 3 ) ;
In diesem Beispiel wird ORDER BY in der Unterabfrage angegeben, sodass die Unterabfrage die Namen in der Reihenfolge der monatlichen Verkäufe zurückgibt. Das ORDER BY in der Unterabfrage gilt nicht für die äußere Abfrage. Diese Abfrage gibt die Namen der drei Filialen zurück, die den höchsten monatlichen Umsatz erzielt haben, jedoch nicht unbedingt nach monatlichen Umsätzen sortiert.
Das Sortieren kann teuer sein. Wenn die Ergebnisse der äußeren Abfrage sortiert werden sollen, verwenden Sie eine
ORDER BY
-Klausel nur auf der obersten Abfrageebene und verwendenORDER BY
-Klauseln in Unterabfragen nur, wenn dies unbedingt erforderlich ist.
Beispiele¶
Sortierreihenfolge für Zeichenfolgen:
SELECT column1 FROM VALUES ('a'), ('1'), ('B'), (null), ('2'), ('01'), ('05'), (' this'), ('this'), ('this and that'), ('&'), ('%') ORDER BY column1; +---------------+ | COLUMN1 | |---------------| | this | | % | | & | | 01 | | 05 | | 1 | | 2 | | B | | a | | this | | this and that | | NULL | +---------------+
Sortierreihenfolge für Zahlen:
SELECT column1 FROM VALUES (3), (4), (null), (1), (2), (6), (5), (0005), (.05), (.5), (.5000) ORDER BY column1; +---------+ | COLUMN1 | |---------| | 0.05 | | 0.50 | | 0.50 | | 1.00 | | 2.00 | | 3.00 | | 4.00 | | 5.00 | | 5.00 | | 6.00 | | NULL | +---------+
Sortierreihenfolge für NULL-Werte:
SELECT column1 FROM VALUES (1), (null), (2), (null), (3) ORDER BY column1; +---------+ | COLUMN1 | |---------| | 1 | | 2 | | 3 | | NULL | | NULL | +---------+ SELECT column1 FROM VALUES (1), (null), (2), (null), (3) ORDER BY column1 NULLS FIRST; +---------+ | COLUMN1 | |---------| | NULL | | NULL | | 1 | | 2 | | 3 | +---------+ SELECT column1 FROM VALUES (1), (null), (2), (null), (3) ORDER BY column1 DESC; +---------+ | COLUMN1 | |---------| | NULL | | NULL | | 3 | | 2 | | 1 | +---------+ SELECT column1 FROM VALUES (1), (null), (2), (null), (3) ORDER BY column1 DESC NULLS LAST; +---------+ | COLUMN1 | |---------| | 3 | | 2 | | 1 | | NULL | | NULL | +---------+