標籤:需要 設定 from 其它 就是 san 為什麼 span order
今天有一條sql需要某兩個欄位不可為空,當然是不能為null也不可為空字串啦。
然後就開始寫
1 WHERE2 (3 order_amount != null 4 and order_amount != ‘‘ 5 and received_amount != null 6 and received_amount != ‘‘7 )
查詢結果,一條也沒有!
網上搜尋才發現:
在SQL中邏輯運算式的可能值包括TRUE、FALSE和UNKNOWN,它們被稱之為三值邏輯。
在其它的語言中,邏輯運算式只有兩種,要麼是true,要麼就是false。而sql中卻存在第三個邏輯運算式UnKnown,這個是sql中特有的。從字面意思上我們可以解理該值的意思是:什麼都不知道,就是什麼都不是。一般情況下我們將任何值(包括NULL本身)與NULL做比較的時候,都會返回UnKnown。而在查詢運算式中(比如where與having中),UnKnown會視為false。所以我們就明白了為什麼select * from 表 where 欄位=null查不到正確的結果的原因了。
但並不是在所有場情下UnKnown都會視為false來處理,在check約束中,UnKnown就會視為true來處理。這就是為什麼我們設定某個欄位的值必須大於等於0的情況下,我們還可以往該欄位中插入Null值,那是因為在check約束中null>=0的邏輯結果UnKnown會被當作true來處理。
所以判斷null值請用 is not
1 WHERE2 (3 order_amount is not null 4 and order_amount != ‘‘ 5 and received_amount is not null 6 and received_amount != ‘‘7 )
sql竟然還有這麼個規則,不同語言之間的差距也太大了,每種語言都有自己個人化的東西。為什麼程式員難做,因為每種語言都不同,而做一個項目往往要用到幾種語言,而且語言也在發展。希望日後能有一種語言適用於所有情境:資料庫、後台、前端......
SQL條件!=null查不出資料