本文實驗環境為MarinaDB,即MySQL開源版本
先看一下這個sql
SELECT *
FROM table WHERE id IN (NULL) ;
在表記錄所有列都有值的情況下顯然都是查不出的,那把in 改成not in是不是就能反過來查出所有記錄呢?
SELECT *
FROM table WHERE id not IN (NULL) ;
然而結果還是一條都查不出來,按照字面理解,id不為NULL,不是所有記錄都滿足這個條件嗎
為了搞清原因我們試驗一下以下三條sql
select '1'='1110'
select '1110'='1110'
select '1110'!=NULL
0為否1為是,以上2條sql的結果符合我們的直觀預知,但第三條則不一樣了
結果為NULL,我們再實驗以下以下兩條sql,結果也都為NULL
select NULL!=NULL
select NULL=NULL
說明涉及到NULL的sql判斷,一概為未知,也就是否,這也就解釋了為什麼 WHERE id not IN (NULL) 沒有任何一條記錄符合,所以我們在日常使用中,需要保證條件list中沒有NULL元素