亚洲视频二区_亚洲欧洲日本天天堂在线观看_日韩一区二区在线观看_中文字幕不卡一区

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.430618.com 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

NULL是SQL常見的關鍵字之一,表示“空,無”的意思。它在SQL中是一種獨特的存在,今天來匯總一下與它相關的知識點,看看這些你都知道嗎?


先貼一下我們的原始數據,是一個只有1列的表,表名為example,很簡單:

SQL中這些與NULL有關的細節,你知道嗎?

 

 

1.NULL是一種特殊的值,對某字段使用distinct 關鍵字時,NULL和一般值一樣,都會排重,只保留一個值。

SQL中這些與NULL有關的細節,你知道嗎?

 

2.不能對NULL值使用比較運算符

直白地講,不能對null值使用等號(=)或者不等號(!=)進行比較,要使用is null 和 is not null。

SQL中這些與NULL有關的細節,你知道嗎?

 

有一種情況需要注意,假設我們需要取col不為2的所有col值,包括null。不能只寫where col <> '2',因為這樣的寫法不會包括NULL值。我們需要寫成where col <> '2' or col is null。

 

SQL中這些與NULL有關的細節,你知道嗎?

 

3.count(*)會統計null值,count(列名)不包括null值。

 

SQL中這些與NULL有關的細節,你知道嗎?

 

4.含NULL值的運算結果都為NULL,如下面圖所示(點擊查看大圖)

SQL中這些與NULL有關的細節,你知道嗎?

 

 

5.使用sum函數和avg函數時,相應列中包含NULL的,會發生什么?

SQL中這些與NULL有關的細節,你知道嗎?

 

sum和avg函數作用于含有NULL的列,NULL值不參與計算。上面圖中,sum(col) 是1+2+2+3=8。avg(col) 是(1+2+2+3)/4=2,注意分母是4而不是6。如果需要將NULL值當作0值參與到運算中,可以用case when的方式進行判斷賦值。

select sum(case when col is null then 0 else col end) from example;#結果是8
select avg(case when col is null then 0 else col end) from example;#分母是6,結果是1.33

除此外,在使用max,min時,也會忽略NULL值。事實上,聚合函數如果以列名為參數,那么在計算之前就會把NULL 排除在外。

6.如果某列含有null,使用group by 進行聚合時,null值會單獨保留一行。

這一點和第一點有點類似,見下面代碼。

SQL中這些與NULL有關的細節,你知道嗎?

 

7.null占用的空間是多少?

SQL中這些與NULL有關的細節,你知道嗎?

 

我們在原數據的基礎上插入了一行空字符串的數據。然后來看每一個值所占用的空間。可以看到,NULL所占的空間是NULL,是占用空間的,而空字符串長度是0,是不占用空間的。

NULL columns require additional space in the row to record whether their values are NULL.

NULL列需要行中的額外空間來記錄它們的值是否為NULL。

有一個比喻很恰當:空值就像是一個真空狀態杯子,什么都沒有,而NULL值就是一個裝滿空氣的杯子,雖然看起來都是一樣的,但是有著本質的區別。

補充說明:對于空值的判斷需要用=,!= 等算數運算符,而NULL值不行。count等聚合函數會忽略NULL值,但不會忽略空值。

8.對NULL進行排序,結果如何?

SQL中這些與NULL有關的細節,你知道嗎?

 

上面的結果,升序排序,NULL在最開頭,但這并不能說明NULL比1小,因為我們前面提到是不能對NULL使用比較運算符的。這里的結果只是把NULL放在了開頭顯示,可能在另外的數據庫中,會統一放到結尾顯示。

 

9.大多數函數作用于NULL,結果都是NULL,如concat函數,abs函數等。但COALESCE函數除外,它返回第一個不為NULL的值。我們常會看到的NVL函數是該函數的簡化版本,類似的函數還有IFNULL。

SELECT COALESCE(NULL, 1) AS col_1,
COALESCE(NULL, 'test', NULL) AS col_2,
COALESCE(NULL, NULL, '2009-11-01') AS col_3;
--結果:1 test 2009-11-01

 

10.NULL的其他作用

NULL多用在字段約束中,如非空約束可以用NOT NULL表示。NULL經常用在case表達式中的ELSE子句中:case when <條件> else NULL end,else的部分也可以不寫,但為了易讀性,還是建議寫。

 

小結

對NULL常用的知識點總結如下面的思維導圖,歡迎大家補充。(在有些地方看到了在插入和更新數據時NULL的注意事項和索引相關的知識,由于用的比較少,就不放在這里了,可以參考文末鏈接自行學習)

SQL中這些與NULL有關的細節,你知道嗎?

分享到:
標簽:SQL
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定