我想我並不完全理解SQL中NULL的含義。我跑了這個SQL,我期望看到1作爲輸出,但我沒有看到:「select 1 where NULL <> -1」的輸出;「
select 1 where NULL <> -1;
是不是NULL和-1不同?任何人都可以解釋爲什麼「NULL <> -1」這個子句是否爲假?
我想我並不完全理解SQL中NULL的含義。我跑了這個SQL,我期望看到1作爲輸出,但我沒有看到:「select 1 where NULL <> -1」的輸出;「
select 1 where NULL <> -1;
是不是NULL和-1不同?任何人都可以解釋爲什麼「NULL <> -1」這個子句是否爲假?
NULL
意味着未知。所以用where NULL <> -1
你想知道未知值是否等於-1。 DBMS不知道(當然),所以表達式的結果既不是TRUE
也不是FALSE
;它是NULL
。
僅選擇WHERE
子句導致TRUE
的行。由於您的表達式不會導致TRUE
,而是導致NULL
,因此不會選擇任何行。
事實上,與NULL比較的結果會導致UNKNOWN,而不是NULL。 – dnoeth
@dnoeth:不,NULL *是未知的數據庫名稱。嘗試'select 1 where(null = -1)is null'。 (這裏是對PostgreSQL的測試:http://sqlfiddle.com/#!15/9eecb7db59d16c80417c72d1e1f4fbf1/11585。) –
列可以是NULL,但從來沒有比較的結果,這就是爲什麼有'IS UNKNOWN'標準SQL(也是PostgreSQL)。請參閱https://books.google.de/books?id=efe2wB_DfxYC&pg=PA219&lpg=PA219&dq=%22Truth+table+for+the+AND+boolean+operator%22&source=bl&ots=DfT9W4xLGF&sig=Yee-tSw5oQjTfoazWtRYEzuXBMM&hl=de&sa = X&ved = 0ahUKEwjQ6ICmrpfPAhWBpiwKHVNQBo0Q6AEIJTAB#v = onepage&q =%22Truth%20table%20for%20the%20AND%20boolean%20operator%22&f = false – dnoeth
基本上,除IS NULL以外的所有比較都返回「false」或「NULL」。也就是說,它們從來都不是真的,行被過濾掉了。 –
NULL不是一個值,因此無法進行比較。 – Joe
這就是爲什麼我們聲明'something IS NULL'而不是'something = NULL' –