Eventuali duplicati:
what is “=null” and “ IS NULL”
Is there any difference between IS NULL and =NULLSQL è nullo e = null
Qual è la differenza tra
where x is null
e
where x = null
e perché quest'ultimo non funziona?
Eventuali duplicati:
what is “=null” and “ IS NULL”
Is there any difference between IS NULL and =NULLSQL è nullo e = null
Qual è la differenza tra
where x is null
e
where x = null
e perché quest'ultimo non funziona?
In SQL, un confronto tra un valore null
e qualsiasi altra valore (compreso un altro null
) utilizzando un operatore di confronto (ad esempio =
, !=
, <
, ecc.) verrà generato un null
, che è considerato come false
ai fini di una clausola where (in senso stretto, è "non vero", piuttosto che "falso", ma l'effetto è lo stesso).
Il ragionamento è che uno null
significa "sconosciuto", quindi il risultato di qualsiasi confronto con un null
è anche "sconosciuto". Quindi non otterrai risultati nelle righe codificando where my_column = null
.
SQL fornisce la sintassi speciale per testare se una colonna è null
, tramite is null
e is not null
, che è una condizione particolare per verificare un null
(o meno una null
).
Ecco alcuni SQL che mostrano una varietà di condizioni e il loro effetto come sopra.
create table t (x int, y int);
insert into t values (null, null), (null, 1), (1, 1);
select 'x = null' as test , x, y from t where x = null
union all
select 'x != null', x, y from t where x != null
union all
select 'not (x = null)', x, y from t where not (x = null)
union all
select 'x = y', x, y from t where x = y
union all
select 'not (x = y)', x, y from t where not (x = y);
ritorni soltanto 1 fila (come previsto):
TEST X Y
x = y 1 1
vedere questo in esecuzione su SQLFiddle
e come 'is null' funziona. – joshua
Ancora molti problemi con questa risposta. "un confronto con null è sempre considerato falso" - non nel controllo dei vincoli, come già sottolineato, e non in casi speciali, ad es. 'NULL IS NULL' è un confronto che valuterà su TRUE. "null significa 'unknown'" - null è un segnaposto per un valore che dovrebbe essere presente ma per qualche motivo è attualmente mancante ed è l'applicazione (non il null) che fornisce il significato semantico (sconosciuto, non si applica, testimone non rispondeva, ecc.) "se un nullo è in una lista ..." il tuo esempio sembra coinvolgere una tabella, non una lista. – onedaywhen
@onedayquando pensavo di essere chiaro ... per "confronto" intendo '=' o '! =' Etc, * not * 'IS NULL' o' IS NOT NULL'. FYI il risultato di una selezione di una sola colonna, come usato in 'IN (SELECT ...)', è chiamato una "lista" – Bohemian
In primo luogo è corretto modo di controllare se un valore di campo è null
tempo dopo non funziona il modo in cui ci si aspetta che a causa null
è il valore speciale, che non è uguale niente, quindi non è possibile utilizzare confronto di uguaglianza utilizzando =
per esso.
Così, quando è necessario verificare se un valore di campo è null
o no, utilizzare:
where x is null
invece di:
where x = null
E 'importante notare, che NULL non è uguale a NULL.
NULL
non è un valore e pertanto non può essere confrontato con un altro valore.
where x is null
controlla se x è un valore nullo.
where x = null
sta verificando se x è uguale a NULL, che non sarà mai vero
Null è un valore, è solo un valore sconosciuto. Come nei linguaggi di programmazione, la variabile può avere valore null. Inoltre puoi confrontare se (varA! = Null). In sql anche se è trattato in modo diverso come hai fatto notare. – broadband
@broadband: null non è un valore, proprio come l'infinito non è un numero. È più una cosa filosofica però ... Sì, puoi assegnare "null" a una variabile, ma ciò significa semplicemente che stai disattivando o reimpostando tale variabile. 0 o "" sarebbe un valore, ma null in modo efficace significa "questa variabile non ha valore". – Sygmoral
@Sygmoral internamente quando scrivi in C# string a = null, significa che stai impostando il valore 'null' sulla variabile' a'. Ma l'interpretazione per programmatore è come hai detto tu: "questa variabile non ha valore". Ulteriore più in sql null può avere più interpretazioni o logica a tre valori. – broadband
penso che l'uguaglianza è qualcosa che può essere assolutamente determinato. Il problema con null è che è intrinsecamente sconosciuto. null combinato con qualsiasi altro valore è nullo - sconosciuto. Chiedere SQL "Il mio valore è uguale a null?" sarebbe sconosciuto ogni volta, anche se l'input è nullo. Penso che l'implementazione di IS NULL chiarisca.
Poiché il risultato di qualsiasi confronto aritmetico con NULL è anche NULL, non è possibile ottenere alcun risultato significativo da tali confronti: http://dev.mysql.com/doc/refman/5.0/en/working-with-null. html – scibuff