2010-10-07 24 views
8

Powiel możliwe:
Why does NULL = NULL evaluate to false in SQL serverDlaczego kolumna = NULL nie zwraca żadnych wierszy?

Jeśli wygenerować zapytanie do wstawiania danych w tabeli "MyTab" dla kolumny --- wiek, płeć, DOB, ID

INSERT INTO MyTab 
VALUES (22, '', '', 4) 

Jaka będzie wartość w kolumnie Sex & DOB? Czy jest to NULL?

Jeśli wartość jest NULL wtedy ---

SELECT * FROM MyTab 
WHERE Sex=NULL 

powyżej zapytania nie daje wyjściowe ---- wybrane wiersze --- dlaczego ??

jeśli wartość nie jest NULL wtedy ---

SELECT * FROM Mytab 
WHERE Sex IS NULL 

powyżej zapytania daje wyjście ---- jak ??

+1

NULL nie ma niczego równego. So = NULL zawsze zwraca false. I dlatego istnieje specjalna składnia do testowania zerowości. Dotyczy to wszystkich baz danych SQL ANSI. – APC

+0

"Jaka będzie wartość w kolumnie Sex & DOB? Czy jest NULL?" Zależy od RDBMS. W Oracle tak, to będzie puste. W SQL Server nie ma wartości, która byłaby pustym łańcuchem, '' '. –

Odpowiedz

2

Od Null (SQL)

niezrozumienia prac jak null jest przyczyną dużej liczby błędów w kodzie SQL, zarówno w standardzie ISO SQL oświadczeniach i w konkretnym SQL dialektów wspieranych przez real- świat systemy zarządzania bazami danych. Błędy te są zwykle wynikiem pomyłki między Null a 0 (zero) lub pustego ciągu (ciąg znaków o wartości zero, reprezentowanej w SQL jako ""). Null to zdefiniowany przez standard ISO SQL jako , różni się jednak od pustego ciągu i wartością liczbową 0. Podczas gdy wartość Null oznacza brak dowolnej wartości, , pusty ciąg znaków i wartości numeryczne reprezentują rzeczywiste wartości .

Również z SET ANSI_NULLS

Gdy zestaw ANSI_NULLS jest wyłączona, równości (=) i nie jest równa (<>) porównanie operatorzy nie są zgodne ze standardem SQL-92 . Instrukcja SELECT z użyciem WHERE nazwa_kolumny = NULL zwraca wiersze z wartościami pustymi w column_name. Instrukcja SELECT z użyciem WHERE nazwa_kolumny <> NULL zwraca wiersze z wartościami niepustymi w kolumnie. W dodatku dodatek instrukcja SELECT przy użyciu WHERE nazwa_kolumny <> Wartość XYZ zwraca wszystkie wiersze, które nie są wartością XYZ i , które nie mają wartości NULL.

10

NULL jest szczególną wartością SQL oznaczający brak danych. Jako takie, to nie może zrobić zapytań typu:

SELECT fields FROM table WHERE column = NULL 

NULL nie można porównać do niczego, w tym NULL się. Zamiast tego, że trzeba:

SELECT fields FROM table WHERE column IS NULL 

Jednak w przypadku, gdy są naprawdę wstawiając pustą wartość w Sex i DOB.
I pusta wartość nie jest NULL. Trzeba by zapytać o:

SELECT fields FROM table WHERE column = '' 
0

NULL oznacza brak danych (nawet puste lub pusty stuff), więc Column = NULL nie będzie działać chociaż Column IS NULL powinien powrócić wierszy z tej kolumny za nieważną. Ale wstawiasz wartość, więc porównanie z NULL nie zwróci żadnych wierszy.

2

'' - to oznacza pusty ciąg znaków. Jeśli chcesz wstawić NULL, trzeba yo używać

INSERT INTO MyTab 
      VALUES (22, '', NULL, 4) 
0

Jak mówili inni, najpierw zapytanie zwraca żadnego wyjścia, ponieważ nie można sprawdzić dla NULL z równa operatora. Drugie zapytanie jest bardziej zagadkowe - sądzę tylko, że używasz Oracle, który traktuje puste ciągi jako NULL.

Odpowiedź na pytanie o wartości w polach Sex i DOB zależy od rodzaju tych pól i silnika bazy danych, z którymi pracujesz.

Powiązane problemy