Firebird Documentation Index → Guida sull'uso di NULL nel linguaggio SQL di Firebird → Gli ordinamenti |
In Firebird 2.0, i NULL
sono considerati
«precedenti» a qualsiasi altra cosa nell'ordinamento. Di
conseguenza vengono prima negli ordinamente ascendenti e ultimi negli
ordinamenti discendenti. Questo può essere modificato aggiungendo
la direttiva NULLS FIRST oppure NULLS
LAST alla clausola ORDER BY.
Nelle versioni precedenti, i NULL
erano sempre
messi alla fine dell'insieme ordinato, indipendentemente dal fatto che
fosse ascendente o discendente. In Firebird 1.0 la storia finiva qui: i
NULL
sono ultimi in qualsiasi ordinamento, punto. In
Firebird 1.5 è stata introdotta la sintassi NULLS
FIRST/LAST, per forzarli all'inizio o alla fine.
Per riassumere il tutto:
Tabella 6. Posizionamento dei NULL
negli
ordinamenti
Ordinamento | Posizione dei NULL |
||
---|---|---|---|
Firebird 1 | Firebird 1.5 | Firebird 2 | |
order by ... [asc] | alla fine | alla fine | all'inizio |
order by ... desc | alla fine | alla fine | alla fine |
order by ... [asc | desc] nulls first | — | all'inizio | all'inizio |
order by ... [asc | desc] nulls last | — | alla fine | alla fine |
Naturalmente è inutile, per quanto corretto, specificare NULLS FIRST nel caso ascendente oppure NULLS LAST in quello discendente con Firebird 2. Lo stesso dicasi per NULLS LAST in qualsiasi ordinamento in Firebird 1.5.
Se si richiede un ordinamento dei NULL
non default, non verrà utillizzato nessun indice. In Firebird 1.5,
questo è il caso dei NULLS FIRST. In 2.0 e
successivi, succede con NULLS LAST negli
ordinamenti ascendenti e con NULLS FIRST in
quelli discendenti.
Aprendo un database pre-2.0 con Firebird 2, mostrerà il
vecchio comportamento sull'ordinamento dei
NULL
, cioè alla fine, a meno di esplicito
NULLS FIRST. Un ciclo di backup/restore rimette
le cose a posto, se la restore viene effettuata con la gbak di
Firebird!
Firebird 2.0 ha un problema che provoca il fallimento della direttiva NULLS FIRST|LAST in certe circostanze insieme a SELECT DISTINCT. Vedere la lista dei problemi per maggiori dettagli.
Non si deve essere tentati dal fatto che siccome
NULL
è la «cosa più piccola» negli
ordinamenti prima di Firebird 2, si possa pensare che espressioni come
«NULL
< 3» possano ora riportare
true
. No! Usare NULL
in questo
tipo di espressioni darà sempre risultato
NULL
.
Firebird Documentation Index → Guida sull'uso di NULL nel linguaggio SQL di Firebird → Gli ordinamenti |