關於sql中子查詢not in 後面不能爲null的理解

平時在sql查詢中都要注意not in後面的條件中不能有null,如果有null就沒有返回結果了,而in後面有null依然可以有返回結果。
說下我的理解:
in後面的子句可以理解爲or拼接
比如

select * from t_student where height in(175, 177, null)

後面的height in (175, 177, null)可以理解爲height =175 || =177 || =null只要滿足一項判斷,整條判斷就算true,於是這條記錄就會被放到結果集裏面

而not in 後面的子句可以理解爲and 拼接
height not in (175, 177, null) 可以理解爲 height != 175 && != 177 && != null
在數據庫中任何有null參與的比較運算都會被算做false,所以一項判斷爲false,整條判斷就算false,於是記錄就不會被放到結果集裏面。

再放上幾個關於null的“坑”

  • 如果null參與算術運算,則該算術表達式的值爲null。(例如:+,-,*,/ 加減乘除)
  • 如果null參與比較運算,則結果可視爲false。(例如:>=,<=,<> 大於,小於,不等於)
  • 如果null參與聚集運算,則聚集函數都置爲null(使用isnull(字段,0)等方式可以避免這種情況)。除count(*), count(1), count(0)等之外(count(字段) 字段爲null的行不參與計數)。
  • 如果在not in子查詢中有null值的時候,則不會返回數據。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章