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 NULL
s 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 |