2010-10-07 21 views
8

Eventuali duplicati:
Why does NULL = NULL evaluate to false in SQL serverPerché colonna = NULL non restituisce righe?

Se si genera una query per inserire i dati nella tabella "MyTab" per la colonna --- età, sesso, data di nascita, ID

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

Quale sarà il valore nella colonna Sesso & DOB? È NULL?

Se il valore è NULL allora ---

SELECT * FROM MyTab 
WHERE Sex=NULL 

sopra interrogazione dà uscita ---- nessuna riga selezionate --- perché ??

se il valore non è NULL allora ---

SELECT * FROM Mytab 
WHERE Sex IS NULL 

sopra interrogazione dà l'uscita ---- come ??

+1

NULL non equivale a nulla. Quindi = NULL restituisce sempre false. Ed è per questo che esiste una sintassi speciale per il test di nullità. Questo è vero per tutti i database SQL ANSI. – APC

+0

"Quale sarà il valore nella colonna Sex & DOB? NULL?" Dipende da RDBMS. In Oracle, sì, sarebbe nullo. In SQL Server, no, il valore sarebbe una stringa vuota, ''''. –

risposta

2

Da Null (SQL)

Incomprensione di opere come nulla è la causa di un gran numero di errori nel codice SQL, sia in ISO standard SQL dichiarazioni e in SQL specifica dialetti supportati da reale world sistemi di gestione di database. Questi errori sono solitamente il risultato di confusione tra Null eo 0 (zero) o una stringa vuota (un valore di stringa con una lunghezza pari a zero, rappresentato in SQL come ''). Null è definito dallo standard ISO ISO come diverso da una stringa vuota e dal valore numerico 0, tuttavia. Mentre Null indica l'assenza di qualsiasi valore, la stringa vuota e lo zero numerico rappresentano entrambi i valori effettivi .

anche da SET ANSI_NULLS

Quando SET ANSI_NULLS è OFF, Eguali (=) e diverso da (<>) confronto operatori non seguono lo SQL-92 standard. Un'istruzione SELECT che utilizza WHERE column_name = NULL restituisce le righe con valori null in column_name. Un'istruzione SELECT che utilizza WHERE column_name <> NULL restituisce le righe con valori non nulli nella colonna. Nell'aggiunta , un'istruzione SELECT che utilizza WHERE nome_colonna <> XYZ_value restituisce tutte le righe che non sono il valore XYZ e che non sono NULL.

10

NULL è un valore speciale in SQL denota la assenza di dati. Come tale, è non può fare domande come:

SELECT fields FROM table WHERE column = NULL 

NULL non può essere paragonato a qualsiasi cosa, compreso NULL stesso. Invece, avreste bisogno:

SELECT fields FROM table WHERE column IS NULL 

Tuttavia nel caso in cui si inserisce davvero un valore vuoto in Sex e DOB.
E il valore vuoto non è NULL. Dovreste query per:

SELECT fields FROM table WHERE column = '' 
0

NULL significa non ci sono dati (nemmeno roba vuoto o vuoto), quindi Column = NULL non è andare a lavorare, anche se Column IS NULL dovrebbe restituire le righe con quella colonna come NULL. Ma stai inserendo il valore '' così il confronto con NULL non restituirà alcuna riga.

2

'' - significa stringa vuota. Se si desidera inserire NULL, è necessario utilizzare yo

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

Come altri hanno detto, prima query non restituisce alcun uscita perché non è possibile verificare la presenza di NULL con uguale operatore. La seconda query è più sconcertante - la mia unica ipotesi è che tu stia usando Oracle che tratta le stringhe vuote come NULL.

La risposta alla domanda sui valori nei campi Sesso e DOB dipenderà dal tipo di campi e dal motore di database con cui si sta lavorando.

Problemi correlati