Powiel możliwe:
what is “=null” and “ IS NULL”
Is there any difference between IS NULL and =NULLSQL jest nieważna i = null
Jaka jest różnica między
where x is null
i
where x = null
i dlaczego te ostatnie nie działają?
Powiel możliwe:
what is “=null” and “ IS NULL”
Is there any difference between IS NULL and =NULLSQL jest nieważna i = null
Jaka jest różnica między
where x is null
i
where x = null
i dlaczego te ostatnie nie działają?
W SQL porównanie między wartością null
i wszelkie inne wartość (w tym inny null
) za pomocą operatora porównania (np. =
, !=
, <
, itp.) spowoduje, że null
, który jest uważany za false
dla celów klauzuli where (ściśle rzecz biorąc, to "nie jest prawdą", a nie "fałsz", ale efekt jest taki sam).
Rozumowanie jest takie, że null
oznacza "nieznany", więc wynik jakiegokolwiek porównania z null
jest również "nieznany". Więc nie otrzymasz trafienia w wiersze przez kodowanie where my_column = null
.
SQL zapewnia specjalną składnię do testowania, czy kolumna null
poprzez is null
i is not null
, który jest szczególnych warunków do badania na null
(lub nie jest null
).
Oto niektóre SQL przedstawiające różne warunki i ich wpływ jak na powyższym.
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);
zwraca tylko 1 wiersz (zgodnie z oczekiwaniami):
TEST X Y
x = y 1 1
zobaczyć ten działa na SQLFiddle
i jak działa 'null'. – joshua
Nadal wiele problemów z tą odpowiedzią. "porównanie z wartością zerową jest zawsze uważane za fałszywe" - nie w sprawdzaniu ograniczeń, jak już wskazano, a nie w szczególnych przypadkach, np. 'NULL IS NULL' to porównanie, które oceni PRAWDA. "null" oznacza "nieznany" "- null jest symbolem zastępczym dla wartości, która powinna być obecna, ale z jakiegoś powodu jest obecnie brakująca i to aplikacja (nie wartość pusta) dostarcza znaczenia semantycznego (nieznane, nie dotyczy, świadek nie reagował, itp.). "jeśli null znajduje się na liście ..." Twój przykład wydaje się obejmować tabelę, a nie listę. – onedaywhen
@początek, gdy myślałem, że jestem jasny ... przez "porównanie" mam na myśli '=' lub '! =' Etc, * not * 'IS NULL' lub' IS NOT NULL'. FYI wynik pojedynczego wyboru kolumn, taki jak użyty w 'IN (SELECT ...)', jest nazywany "listą" – Bohemian
Pierwszy jest prawidłowy sposób na sprawdzenie, czy wartość pola jest null
natomiast później nie będzie działać tak, jak można oczekiwać, że ponieważ null
jest szczególna wartość, która nie równa nic, więc nie można użyć porównania równości użyciu =
dla to.
Więc kiedy trzeba sprawdzić, czy wartość pola jest null
lub nie, użyj:
where x is null
zamiast:
where x = null
ważne jest, aby pamiętać, że NULL nie równa NULL.
NULL
nie jest wartością, a zatem nie można jej porównać z inną wartością.
sprawdza, czy x jest wartością pustą.
where x = null
sprawdza czy x jest równe NULL, który nigdy nie będzie prawdziwym
Null jest wartością, jest to po prostu nieznana wartość. Podobnie jak w języku programowania zmienna może mieć wartość null. Ponadto możesz porównać, jeśli (varA! = Null). W sql jednak jest traktowany inaczej, jak wskazałeś. – broadband
@broadband: null nie jest wartością, podobnie jak nieskończoność nie jest liczbą. Jest to jednak coś bardziej filozoficznego ... Tak, możesz przypisać "null" do zmiennej, ale to po prostu oznacza, że jesteś niezrównoważony lub resetujesz tę zmienną. 0 lub "" byłoby wartością, ale wartość null oznacza "ta zmienna nie ma wartości". – Sygmoral
@Sygmoral wewnętrznie, gdy piszesz C# string a = null, oznacza to, że ustawiasz wartość 'null' na zmienną' a'. Ale interpretacja dla programisty jest taka, jak powiedziałeś: "ta zmienna nie ma wartości". Więcej więcej w sql null może mieć wiele interpretacji lub logiki trójwartościowej. – broadband
myślę, że równość jest czymś, co może być absolutnie zdeterminowany. Problem z brakiem jest taki, że jest z natury nieznany. null w połączeniu z dowolną inną wartością jest null - unknown. Pytanie do SQL "Czy moja wartość jest równa zeru?" byłby nieznany za każdym razem, nawet jeśli dane wejściowe mają wartość zerową. Myślę, że wdrożenie IS NULL wyjaśnia.
Ponieważ wynikiem dowolnego porównania arytmetycznego z wartością NULL jest również NULL, nie można uzyskać żadnych znaczących wyników z takich porównań - http://dev.mysql.com/doc/refman/5.0/en/working-with-null. html – scibuff