null值的處理是mysql經常被混淆的概念之一,也是查詢中經常會犯迷糊的地方,做下簡單整理以便日後查詢:
自己理解的:
1:null值只能用is null ,is not null和ifnull()判斷,不能進行任何比較運算,其他=,!=,in,not in...與null的比較都無任何資料返回
2:查詢結果集中只有is null ,is not null會對列中的null做篩選,其他查詢條件只對列中的非null值進行比較和過濾(此時此列中null值所在的行可以說不存在)
3:我們應該把null理解為一種特殊字元,它既不是空值('')也不是實值,它就是null
網上知識總結:
1:null值在與任何其他值甚至null值比較時總是假的(false);
2:包含null的乙個表示式總是產生乙個null值;(select null,1+null,concat('invisible',null);)
3:b樹索引是不會儲存null值的,所以如果索引的字段可以為null,索引的效率會下降很多
4:order by sname 或order by sname asc 時null顯示在開頭,order by sname desc時null顯示在末尾
5:當使用group by時,所有的null值被認為是相等的(顯示在開頭)
6:null和''的區別
6.1:null和''是兩個完全不同的概念,''代表有值(空),就是''.null代表值是未知的(在資料庫表中null用特殊字元儲存)
6.2:''(空值)不占用儲存空間,null是乙個特殊字元,占用空間(在資料庫表中null用特殊字元儲存)
7:比如 select count(*) 和 select count(id),後者是不計算null值的。
建議:1:所有列都定義為not null(null值要占用記憶體,''不占用記憶體,所以把儲存的null值用''替換掉可以提公升查詢效率)
盡量避免null:應該指定列為not null,除非你想儲存null。
在mysql中,含有空值的列很難進行查詢優化,而且對錶索引時不會儲存null值的,所以如果索引的字段可以為null,索引的效率會下降很多。
因為它們使得索引、索引的統計資訊以及比較運算更加複雜。你應該用0、乙個特殊的值或者乙個空串代替空值。
參考部落格:
Mysql的NULL值問題
null值在資料庫中表示未知值或者不存在,null與任何資料進行操作的結果都是null。1.null與數值型別進行算術運算結果為null。2.null與數值型別進行關係運算結果為null。3.null與字串型別進行操作的結果為null。4.判斷乙個值是否為null要使用is null或者is not...
技巧 關於null值的查詢
1 null表示未知的資料變數,與 是有區別的。2 null的比較運算 is null 和 is not null 如 查詢某字段為null的記錄 select from tablename from fieldname is null 也可以這樣 select from tablename fro...
oracle 關於null值排序
在oracle中根據欄位來desc排序的話null值可能會在資料的最前面。然而有時候我們檢視資料的時候並不希望能夠在前面看到這些null值的排序資料。因此我查了一下 1.排序的時候運用nvl decode case.when.函式可以給null值指定乙個值去干擾他排序的位置,如果nvl xx,則是不...