SQL條件!=null查不出資料

來源:互聯網
上載者:User

標籤:需要   設定   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查不出資料

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.