MySql中判斷null可以用 is null 和 =
創(chuàng)新互聯(lián)公司是一家以重慶網(wǎng)站建設公司、網(wǎng)頁設計、品牌設計、軟件運維、seo優(yōu)化、小程序App開發(fā)等移動開發(fā)為一體互聯(lián)網(wǎng)公司。已累計為生料攪拌車等眾行業(yè)中小客戶提供優(yōu)質(zhì)的互聯(lián)網(wǎng)建站和軟件開發(fā)服務。
1、is null :僅僅可以判斷null值,可讀性較高,建議使用。
select * from base_user where username is null
2、=? ? :既可以判斷null值,也可以判斷普通的數(shù)值,可讀性較低。
select * from base_user where?username?= null
查詢字段為空的數(shù)據(jù)。如下三條語句查詢的結果各不相同。
select count(0) from tps_uw_detail where trim(coreContNo)=''; ###1736
select count(0) from? tps_uw_detail where coreContNo is null; ###735
select count(0) from? tps_uw_detail where (coreContNo is null or trim(coreContNo)='');##2471
='';就是存的空字符串;is null 就是默認的。
由于是后來新加的字段,默認為null,所以歷史數(shù)據(jù)都為null。表中加上這個字段后,再落庫的數(shù)據(jù)就是空字符串了。
根據(jù)自己的需求選用腳本,第三個是適合我的。
判斷方法: if ISNULL(aBegBalRule) || LENGTH(trim(aBegBalRule))1 THEN ELSE END IF; NULL值可能令人感到奇怪直到你習慣它。概念上,NULL意味著“沒有值”或“未知值”,且它被看作與眾不同的值。為了測試NULL,你不能使用算術比較 操作符例如=、或!=。為了說明它,試試下列查詢: mysql SELECT 1 = NULL, 1 NULL, 1 NULL, 1 NULL; +----------+-----------+----------+----------+ | 1 = NULL | 1 NULL | 1 NULL | 1 NULL | +----------+-----------+----------+----------+ 返回信鴿網(wǎng)頂部| NULL | NULL | NULL | NULL | +----------+-----------+----------+----------+ 很顯然你不能通過這些比較得到有意義的結果。相反使用IS NULL和IS NOT NULL操作符: mysql SELECT 1 IS NULL, 1 IS NOT NULL; +-----------+---------------+ | 1 IS NULL | 1 IS NOT NULL | +-----------+---------------+ | 0 | 1 | +-----------+---------------+ 請注意在MySQL中,0或 NULL意味著假而其它值意味著真。布爾運算的默認真值是1。 返回信鴿網(wǎng)頂部對NULL的特殊處理即是在前面的章節(jié)中,為了決定哪個動物不再是活著的,使用death IS NOT NULL而不使用death != NULL的原因。 在GROUP BY中,兩個NULL值視為相同。 執(zhí)行ORDER BY時,如果運行 ORDER BY ... ASC,則NULL值出現(xiàn)在最前面,若運行ORDER BY ... DESC,則NULL值出現(xiàn)在最后面。 NULL操作的常見錯誤是不能在定義為NOT NULL的列內(nèi)插入0或空字符串,但事實并非如此。在NULL表示"沒有數(shù)值"的地方有數(shù)值。
在講null之前,我們先看一個例子
表數(shù)據(jù)如下:
然后我們想查出所有名字不為'chen'的其它行記錄,我們有可能這樣寫:
但是結果好像不太如我們所愿,id為1的那條記錄沒有被查出來,null肯定和'chen'不相等呀,為什么會查不出呢?
NUll值對于新手來說非常容易混淆,經(jīng)常會被認為null與空字符串''是一樣的,但事實上,這兩者是非常不一樣,NULL表示的是“a missing unknown value”,而字符串''是一個確定的值,這本質(zhì)上就已經(jīng)不一樣了。
舉個例子:
第一條insert語句認為這個手機號還不確定是多少,是a missing unknown phone number
第二條代表這個手機號碼是確定的,它的手機號碼為空字符串
為了處理和null相關的比較,在mysql中可以用is null、is not null、=、isnull()來測試比較,不能用如=、、來和null值比較測試,任何值(包括和null本身)與null對比和函數(shù)運算操作結果都為null
如下三個例子可以說明問題:
但是呢,凡事都有個例外:
當用distinct、group by、order by時,此時不同的null值被視為相等計算。
最重要的是,在mysql中,0和null代表假,其它的任何值都代表真
所以回頭看最開始的例子,當我們的where條件為name!='chen'時,它與id=1的行進行比較,即測試:
'chen'!='chen'
這個測試結果為0,為假,所以id=1這一行就不會被查出來。接下來再測試:
'zhang'!='chen'
這個測試結果為1,為真,所以id=2這一行就可以被查出來。接下來再測試:
NULL!='chen'
這個測試結果為NULL,為假,所以id=3這一行就不會被查出來。
所以最終的結果就只有id=2這一行的數(shù)據(jù)被查出來了。
那如果要達到我們的目地怎么辦?
推薦用第一種方法。
因為mysql對了null列的查找是有查詢優(yōu)化的:
而第二種在列上加上函數(shù)的查詢時索引是不起作用的。
其它注意事項
select?*?from?tableName?where?fieldName?is?null?;
---tableName?是你的查詢的表名
---fieldName?是你要查詢的字段名
請閱讀,并采納!
null表示的含義是未知,即不知道有沒有。 和‘’空字符串不等,因為空字符串相當于沒有值。 null代表的是不知道有沒有值。 所以在數(shù)據(jù)查詢中如果字段默認值是null,想查詢出不等于某個條件的一定要加上——字段名 is null 或者字段名 is not null來...