2017-06-20 39 views
3

什麼是SQL的設計,這樣做的原因(從Postgres評估的設計,但在所有的口味似乎很可能是相同的:什麼是合理的NULL布爾表達式

select NULL OR TRUE --> True 

select NULL OR FALSE --> NULL (expected false, but is NULL) 
+0

oracle SQL中沒有布爾類型。 – OldProgrammer

+0

'null或true'確實是有效的標準SQL,而Postgres完全實現'boolean'數據類型。然而,你認爲這對其他DBMS來說是正確的是錯誤的。 Oracle,SQL Server,MySQL,DB2 - 它們都不支持'boolean'數據類型。我知道的唯一的其他DBMS是Firebird,H2和HSQLDB –

回答

7

NULL意味着你不我們還不知道

NULL OR False這裏比較容易這個表達式在這一點上顯然不能評估爲True另一方面,我們不知道它的價值是什麼,它可能是真的,但是,我們還沒有足夠的信息來解決整個電子商務問題xpression,等NULL是唯一有意義的結果。

NULL OR TRUE另一方面,確實提供足夠的信息來解決整個表達式。如果條件爲OR,如果任一方爲真,則邏輯上全部結果爲真;這與對方的做法無關。即使該NULL最終結果爲False,表達式結果仍然評估爲True。你可以用NULL做任何事情來使表達成爲False

而且,爲了清楚起見,值得看一下NULL AND TRUENULL AND FALSE。前者也將評估爲NULL,因爲我們還沒有足夠的信息尚未完全解決表達式,而後者將評估爲False,因爲無論如何運行NULL表達式都不能成爲True

如果您真的想要感到困惑,請考慮您進行NULL = NULL平等比較時會發生的情況。真正的結果是我們還不知道(NULL),但是如果你強制這個問題,數據庫會將表達式評估爲False:NULL不等於它本身。

+0

Doh!說得通。 – user48956