Questa è solo una domanda per curiosità, ma sto guardando un database e estraendo dati da una tabella con una query su una delle colonne. La colonna ha quattro possibili valori null
, 0
, 1
, 2
. Quando eseguo la query come:SQL non visualizza valori nulli su una query non uguale a?
SELECT * FROM STATUS WHERE STATE != '1' AND STATE != '2';
ottengo gli stessi risultati di esecuzione:
SELECT * FROM STATUS WHERE STATE = '0';
vale a dire le righe con un valore nullo nel comando superiore nella colonna interrogata sembrano essere omesse dai risultati, avviene sempre in SQL?
Sto eseguendo i miei comandi tramite Oracle SQL Developer.
"questo accade sempre in SQL?" - Risposta breve: no. SQL presenta [logica a tre valori (3VL)] (http: //en.wikipedia.org/wiki/Tre-valued_logic). Dico "mostre" molto volutamente perché le specifiche per il 3VL di SQL sono incoerenti e incomplete. Devi semplicemente imparare tutti i casi limite. L'approccio migliore IMO è di evitare i null in SQL. – onedaywhen
So che questo non aggiunge intuizione, ma il 'OR 'dovrebbe essere un' AND'? – user123444555621
Da quello che posso ricordare quando stavo facendo questo averlo come O è corretto, io volevo solo STATE 0 righe, ma stavo anche ottenendo NULL rows. Non ero a conoscenza della logica a tre valori come descrive @Vash nella sua risposta. Avrei dovuto usare STATE NOT IN ('1', '2') come indicato da Michael Durrant. Il mio SQL è molto meglio di allora era lol. –