多角度看sql中關於null值判斷

1.下面這行代碼可以很好解釋關於null值判斷的真髓。

SELECT  D.*
FROM TT_BOOKING_ORDER D
WHERE 1 = 1
  and d.BOOKING_ORDER_STATUS !=12781002
  and d.BOOKING_ORDER_STATUS is null;

上面的sql是查詢不出任何結果的,因爲“!=”默認是有值的。

2.下面的這行代碼是大家常用的過濾sql。

SELECT D.*
FROM TT_BOOKING_ORDER D
WHERE 1 = 1
  and d.BOOKING_ORDER_STATUS != 12781002;

注意:這裏的“!=”是查不到null值的。

3.如果想查詢包含null值,並且不等於其他值的情況,代碼如下:

SELECT  D.*
FROM TT_BOOKING_ORDER D
WHERE 1 = 1
  and d.BOOKING_ORDER_STATUS !=12781002
  or d.BOOKING_ORDER_STATUS is null;

4.當查詢包含其他條件時,需要注意,比如下面這種情況,查詢出來的結果就會有問題。

SELECT D.BOOKING_COME_TIME,d.*
FROM TT_BOOKING_ORDER D
WHERE 1 = 1
  and D.BOOKING_COME_TIME > '2018-09-11 16:49:00'
  AND D.BOOKING_COME_TIME <= '2018-09-11 16:59:59'
  AND D.BOOKING_ORDER_STATUS != 12541002
   or d.BOOKING_ORDER_STATUS IS NULL

查詢結果如下,查詢出一條時間沒有過濾掉的數據

5.正確的寫法,相信大家都知道了,加個括號,如下:

SELECT D.BOOKING_COME_TIME, d.*
FROM TT_BOOKING_ORDER D
WHERE 1 = 1
  and D.BOOKING_COME_TIME > '2018-09-11 16:49:00'
  AND D.BOOKING_COME_TIME <= '2018-09-11 16:59:59'
  AND (D.BOOKING_ORDER_STATUS != 12541002
         or d.BOOKING_ORDER_STATUS IS NULL)

注意:這裏有個優先級的問題。

參考:

mysql查詢中where條件中的or和and注意事項

SQL語句執行順序

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章