SQL Server: gestione dei valori NULL durante l'ordinamento

Quando si lavora con valori NULL, è importante come si gestiscono i record NULL nel database. Questo esempio illustra e spiega come ordinare e separare i valori NULL e non NULL. Questo esempio dovrebbe funzionare con tutti i tipi di database compresi MySQL, MS SQL e PostgreSQL.

Iniziamo con un esempio.

Considera una tabella dei dipendenti.

commissione di stipendio ename eid ----------- -------------------- ----------- ---- ------- 100 jon 2000 NULL 101 tim 2200 NULL 102 mark 2500 NULL 103 steve 3500 NULL 104 re 5500 0 104 reparto 1500 300 105 adam 5500 800

Ora, si desidera ordinare i risultati dalla tabella dei dipendenti da commissione colonna. Tuttavia, questa colonna è annullabile quindi sarà necessario specificare se i valori NULL sono ordinati per ultimi o per primi.

Il risultato potrebbe contenere valori NULL ordinati per primi o ordinati per ultimi.

selezionare * dall'ordine dei dipendenti per commissione; commissione di stipendio ename eid ----------- -------------------- ----------- ---- ------- 100 jon 2000 NULL 101 tim 2200 NULL 102 mark 2500 NULL 103 steve 3500 NULL 104 re 5500 0 104 reparto 1500 300 105 adam 5500 800 (7 righe interessate)
selezionare * dall'ordine dei dipendenti per la descrizione delle commissioni; commissione di stipendio ename eid ----------- -------------------- ----------- ---- ------- 105 adam 5500 800 104 reparto 1500 300 104 re 5500 0 100 jon 2000 NULL 101 tim 2200 NULL 102 mark 2500 NULL 103 steve 3500 NULL (7 row (s) affected)
 

Le query sopra elencate ordinano i risultati per la colonna nullable (commissione). Se si desidera ordinare i valori non NULL in ordine ascendente e discendente e posizionare i valori NULL in primo o in ultimo, è possibile utilizzare sottoquery con espressione caso.

Utilizzando un'espressione caso, è possibile contrassegnare valori NULL e valori non NULL. Una volta completato, è possibile aggiungere una colonna flag in ordine per clausola. Quindi puoi facilmente ordinare i valori non NULL in ordine crescente / decrescente o i valori NULL in prima o ultima posizione.

Ordinamento dei valori non NULL in ordine crescente o decrescente.

seleziona eid, ename, stipendio, commissione da (selezionare *, caso in cui la commissione è nullo quindi 1 altro 0 finisce come is_null dal dipendente) x ordine di is_null, commissione; commissione di stipendio ename eid ----------- -------------------- ----------- ---- ------- 104 king 5500 0 104 reparto 1500 300 105 adam 5500 800 100 jon 2000 NULL 101 tim 2200 NULL 102 mark 2500 NULL 103 steve 3500 NULL (7 row (s) affected)
 

Nella query precedente, abbiamo ordinato i non NULL in ordine crescente con NULL alla fine.

Ordinamento di NULL prima e non NULL in ordine decrescente.

selezionare eid, ename, stipendio, commissione da (selezionare *, caso in cui la commissione è nullo quindi 1 altro 0 finisce come is_null dal dipendente) x ordine per is_null desc, commissione desc; commissione di stipendio ename eid ----------- -------------------- ----------- ---- ------- 100 jon 2000 NULL 101 tim 2200 NULL 102 mark 2500 NULL 103 steve 3500 NULL 105 adam 5500 800 104 reparto 1500 300 104 re 5500 0 (7 righe interessate)
 

Ora puoi vedere i risultati NULL ordinati per primi, seguiti da non-NULL in ordine decrescente.