SQL Server - Umgang mit NULL-Werten beim Sortieren

Wenn Sie mit NULL-Werten arbeiten, ist es wichtig, wie Sie mit NULL-Datensätzen in Ihrer Datenbank umgehen. In diesem Beispiel wird erläutert, wie NULL- und Nicht-NULL-Werte sortiert und getrennt werden. Dieses Beispiel sollte mit allen Datenbanktypen einschließlich MySQL, MS SQL und PostgreSQL funktionieren.

Beginnen wir mit einem Beispiel.

Betrachten Sie einen Mitarbeitertisch.

eid ename Gehaltskommission ----------- -------------------- ----------- ---- ------- 100 jon 2000 NULL 101 tim 2200 NULL 102 Marke 2500 NULL 103 steve 3500 NULL 104 König 5500 0 104 Station 1500 300 105 Adam 5500 800

Nun möchten Sie die Ergebnisse aus der Employee-Tabelle nach der Sortierung sortieren Kommission Säule. Diese Spalte ist jedoch nullwertfähig. Daher müssen Sie angeben, ob NULL-Werte zuletzt oder zuerst sortiert werden.

Das Ergebnis kann NULL-Werte enthalten, die entweder zuerst oder zuletzt sortiert werden.

Wählen Sie * aus der Mitarbeiterbestellung durch Provision; eid ename Gehaltskommission ----------- -------------------- ----------- ---- ------- 100 jon 2000 NULL 101 tim 2200 NULL 102 Marke 2500 NULL 103 steve 3500 NULL 104 König 5500 0 104 Station 1500 300 105 Adam 5500 800 (7 betroffene Reihen)
Wählen Sie * aus der Mitarbeiterbestellung nach Provisionsabzug aus; eid ename Gehaltskommission ----------- -------------------- ----------- ---- ------- 105 adam 5500 800 104 ward 1500 300 104 könig 5500 0 100 jon 2000 NULL 101 tim 2200 NULL 102 mark 2500 NULL 103 steve 3500 NULL (7 betroffene Zeilen)
 

Die obigen Abfragen sortieren die Ergebnisse nach nullfähigen Spalten (Provision). Wenn Sie Nicht-NULL-Werte in aufsteigender und absteigender Reihenfolge sortieren und die NULL-Werte entweder als erste oder als letzte platzieren möchten, können Sie Unterabfragen mit case-Ausdruck verwenden.

Mit einem case-Ausdruck können Sie NULL-Werte und Nicht-NULL-Werte kennzeichnen. Anschließend können Sie eine Flagspalte in der Reihenfolge nach Klausel hinzufügen. Dann können Sie Nicht-NULL-Werte einfach in aufsteigender / absteigender Reihenfolge oder die NULL-Werte an erster oder letzter Position sortieren.

Sortieren der Nicht-NULL-Werte in aufsteigender oder absteigender Reihenfolge.

Wählen Sie EID, Ename, Gehalt, Provision aus (Wählen Sie * aus, falls die Provision null ist, dann 1 sonst 0 als is_null vom Mitarbeiter) x Auftrag von is_null, Provision; eid ename Gehaltskommission ----------- -------------------- ----------- ---- ------- 104 king 5500 0 104 ward 1500 300 105 adam 5500 800 100 jon 2000 NULL 101 tim 2200 NULL 102 mark 2500 NULL 103 steve 3500 NULL (7 betroffene Zeilen)
 

In der obigen Abfrage haben wir Nicht-NULLs in aufsteigender Reihenfolge mit NULLs zuletzt sortiert.

Sortieren von NULL-Werten zuerst und nicht-NULL-Werten in absteigender Reihenfolge

Wählen Sie EID, Ename, Gehalt, Provision aus (Wählen Sie * aus, Fall, wenn die Provision null ist, dann 1 sonst 0 Ende als is_null vom Mitarbeiter) x Reihenfolge nach is_null desc, Commission desc; eid ename Gehaltskommission ----------- -------------------- ----------- ---- ------- 100 jon 2000 NULL 101 tim 2200 NULL 102 Marke 2500 NULL 103 steve 3500 NULL 105 adam 5500 800 104 Station 1500 300 104 König 5500 0 (7 betroffene Reihen)
 

Nun können Sie die NULL-Ergebnisse der Ergebnisse zuerst sortieren, gefolgt von Nicht-NULL-Werten in absteigender Reihenfolge.