這只是一個出於好奇而提出的問題,但我正在查看數據庫,並從其中一列的查詢中提取數據。該列有四個可能的值null
,0
,1
,2
。當我運行查詢爲:SQL在不等於查詢上不顯示空值?
SELECT * FROM STATUS WHERE STATE != '1' AND STATE != '2';
我得到相同的結果運行:
SELECT * FROM STATUS WHERE STATE = '0';
即查詢列中頂部命令中具有空值的行似乎從結果中省略,這是否總是在SQL中發生?
我正在通過Oracle SQL Developer運行我的命令。
「這是否總在SQL發生嗎?」 - 簡短的回答:不。 SQL展品[三值邏輯(3VL)](http://en.wikipedia。組織/維基/三valued_logic)。我非常故意地說「展覽」,因爲SQL 3VL的規格不一致和不完整。你只需要學習所有的邊緣情況。 IMO最好的方法是避免SQL中的空值。 – onedaywhen
我知道這不會增加洞察力,但是'OR'應該是'AND'嗎? – user123444555621
從我記得當我這樣做,讓它作爲OR是正確的,即我只想要STATE 0行,但我也得到NULL行。我沒有意識到@Vash在他的回答中描述的三值邏輯。 Michael Durrant指出,我應該使用STATE NOT IN('1','2')。我的SQL比現在好多了,然後就是大聲笑。 –