在mysql中,篩選非空的時候常常會用到is not null和!=null,這兩種方法單從字面上來看感受是差很少的,其實如
果去運行一下試試的話差異會很大!
爲何會出現這種狀況呢?
null 表示什麼也不是, 不能=、>、< … 全部的判斷,結果都是false,全部只能用 is null進行判斷。
默認狀況下,推薦使用 IS NOT NULL去判斷,由於SQL默認狀況下對!= Null的判斷會永遠返回0行,但沒有語法錯誤
。
若是你必定想要使用!= Null來判斷,須要加上這個語句:
set ANSI_NULLS off
這時你會發現IS NOT NULL 和 != null 是等效的
個字段若是設爲「NULL」,表示若是這個字段的值爲空時,自動插入一個「NULL」值。
一個字段若是設爲「NOT NULL」,表示若是這個字段的值爲空時,不自動插入「NULL」值(任其無值)。
因此,設爲「NULL」的意思反而是「不能無值」(由MYSQL自動賦「NULL」值),而設爲「NOT NULL」是「能夠無值」
。
其實要證實這一點很簡單,建一個測試表,兩個字段(VC型),一個設爲「NULL」,一個設爲「NOT NULL」,兩個都
插入空值,看看結果就明白了。
NULL 不是 '' 也不是 0。
你的字段定義爲 not null,可是卻賦值了一個 null,那麼數據庫系統會按照該字段類型選擇一個默認的值放進去,
好比 char 就是用空字符串。
但注意,空字符串其實已是一個肯定的值了,就是一個長度爲 0 的字符串!
至於 NULL 值,給你一個正確的理解:把 NULL 理解爲 UNKNOWN。
主要意思是'不知道',就是它多是任何值;
另一層意思是'信息缺失',好比某個存儲姓名信息的字段值是 NULL,表明姓名信息缺失。
因此 NULL 值不是任意一個肯定的值!
舉例來講,邏輯 與/或 運算會的吧?
與運算:true and true = true, true and false = false, false and true = false, false and false =
false
第一個 true and null,它的結果徹底靠 null 肯定。若是它是 true 結果就是 true,若是它是 false,結果就是
false。由於 null 表明不知道,因此結果也是不知道,因此是 null。
第二個 false and null,它的結果不須要靠 null 肯定,由於 and 運算的特性,有 false 出 false,因此結果是
false。
第三個 null and null,就好理解了吧,它徹底就是空對空了,兩個操做數都是不知道,結果天然也是不知道,因此
是 null。
有以下例子:
SQL> select * from test;
ID NAME EMIL
---------- ---------- --------------------
1 hj 124rd
2 fg
SQL>
test表中emil未填寫任何數據查詢:
select name from test where emil = null;
SQL> select name from test where emil = null;
未選定行
select name from test where emil is null;
NAME
----------
fg
SQL>
顯示一條結果。
默認狀況下推薦使用is null 做條件判斷,由於sql默認狀況下對where xx =null的判斷永遠返回0行,不提示語法錯誤。
mysql