| Firebird Documentation Index → Guida sull'uso di NULL nel linguaggio SQL di Firebird → Sommario |
![]() |
NULL in sintesi:
NULL significa
sconosciuto.
Per escludere NULL da un dominio o da una
colonna, aggiungere «NOT NULL» dopo
il nome del tipo.
Per determinare se A è NULL, si usa
«A IS [NOT] NULL».
Assegnare NULL è come assegnare un
qualsiasi altro valore: con «A =
NULL» o con una lista di insert.
Per determinare se A e B sono identici, sapendo che
tutti i NULL sono identici fra loro e differenti
da qualsiasi altra cosa, si usa «A IS [NOT] DISTINCT
FROM B» in Firebird 2 e successivi. Nelle versioni
precedenti i controlli sono:
// uguaglianza: A = B or A is null and B is null// disuguaglianza: A <> B or A is null and B is not null or A is not null and B is null
In Firebird 2 e succesivi si può usare il valore letterale
NULL in quasi tutte le situazioni dove sarebbe
permesso un qualsiasi altro valore normale. In pratica questo dà però
solo più spago con cui appendersi.
Quasi sempre, gli operandi NULL fanno sì
che l'intera operazione riporti NULL. Le
eccezioni degne di nota sono:
«NULL or
true» vale
true;
«NULL and
false» vale
false.
I predicati IN,
ANY|SOME ed
ALL possono (ma non sempre) riportare
NULL o quando l'espressione a sinistra o quando
un elemento della lista/subselect è NULL.
Il predicato [NOT] EXISTS nonriporta mai
NULL. Il predicato [NOT]
SINGULAR non riporta mai NULL in
Firebird 2.1 e successivi, è invece bucato in tutte le versioni
precedenti.
Nelle funzioni di aggregazione, solo i campi
non-NULL sono utilizzati per il calcolo.
L'eccezzione è COUNT(*).
Nei risultati ordinati, i NULLs sono
messi...
1.0: alla fine;
1.5: alla fine, a meno che non sia specificato NULLS FIRST;
2.0: all'inizio del risultato (inizio se ascendente, alla fine se discendente), a meno che non venga specificato esplicitamente NULLS FIRST/LAST.
Se una clausola WHERE o
HAVING vale NULL, la riga
non è inclusa nel risultato.
Se l'espressione di test di una frase IF è
NULL, allora si salta il blocco
THEN e viene eseguito il blocco
ELSE.
Una frase CASE riporta
NULL:
se il risultato selezionato è
NULL.
se non sono trovati abbinamenti validi
(CASE semplice) o nessuna delle condizioni è
true (CASE complesso) e
non c'è la clausola ELSE.
In una frase CASE semplice,
«CASE
<null_expr>»
non si abbina ad un
«WHEN
<null_expr>».
Le l'espressione di controllo di una ciclica
WHILE vale NULL, non si
(ri)entra nel ciclo.
Una frase FOR continua anche se si ricevono
NULL. Essa continuerà a ciclare finchè non
verranno processate tutte le righe, o finchè non sarà interrotta da
un'eccezione o da una direttiva PSQL di interruzione del ciclo.
Nelle chiavi primarie, i NULL non sono
permessi.
Nelle chiavi univoche e negli indici univoci, i
NULL sono
non permessi in Firebird 1.0;
permessi (anche multipli) in Firebird 1.5 e successivi.
Nelle colonne delle chiavi esterne, sono permessi
NULL multipli.
Se un vincolo di CHECK vale
NULL, allora il valore viene
rifiutato sotto Firebird 1.5 e precedenti;
accettato sotto Firebird 2.0 e successivi.
SELECT DISTINCT considera eguali tutti i
NULL, pertanto ne riporta al massimo uno.
Le UDF talvolta convertono NULL
<–> non-NULL in un modo
apparentemente casuale.
Le funzioni COALESCE e
*NVL possono convertire un
NULL in un valore.
La famiglia di funzioni NULLIF è in grado
di convertire valori in NULL.
Aggiungendo una colonna NOT NULL senza
valore di default ad una tabella con dati preeesistenti, tutti i
valori in quella colonna saranno NULL dopo la
creazione. Molti programmi tuttavia - incluso lo strumnento
isql di Firebird – riportano erroneamente
come zeri (0 per i campi numerici, '' per i campi stringa,
ecc.)
Cambiando il tipo di dato di una colonna ad un dominio
NOT NULL, tutti gli eventuali
NULL esistenti nella colonna rimarranno tali. Di
nuovo molti programmi, inclusa isql, li
mostreranno come zeri.
Ricordare: così funziona il NULL in
Firebird SQL. Ci possono essere più o meno sottili differenze
con altri RDBMS.
| Firebird Documentation Index → Guida sull'uso di NULL nel linguaggio SQL di Firebird → Sommario |