最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

解讀mysql中的null問題

 更新時間:2022年09月27日 10:36:32   作者:qq_43208822  
這篇文章主要介紹了解讀mysql中的null問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

mysql的null問題

(1) 使用統(tǒng)計函數的時候會出現null值得情況

在這里插入圖片描述

注意點 sum avg max min 都有可能出現為null的問題 而且 sum avg max min count(具體字段) 都會忽略null的數據 count(*) 不會忽略null數據

(2) 使用count統(tǒng)計需要注意的事項

在這里插入圖片描述

(3)sum()函數實現統(tǒng)計指定字段值之和,在具體統(tǒng)計時將忽略NULL值,但是不會忽略0值

(4)MAX函數和MIN函數會忽略值為NULL的數據,但是不會忽略值為0的數據

(5)distinct數據丟失

在這里插入圖片描述

(6)select數據丟失

在這里插入圖片描述

(7)group by 會讓null值獨立分組

在這里插入圖片描述

(8)通配符不能匹配到列為 NULL 的數據

在這里插入圖片描述

建表的時候盡量設置默認值(0或者’')

SQL中的NULL你真的懂了嗎?

SQL 中的 NULL 到底是怎樣一個概念呢?有什么要注意的嗎?這篇文章就是要把它講清楚。

查詢某列值為 NULL 的數據

當想查詢某一列值為 NULL 的數據時,下面兩種哪個更好呢?

SELECT * FROM SOME_TABLE
WHERE SOME_COLUMN = NULL

還是

SELECT * FROM SOME_TABLE
WHERE SOME_COLUMN IS NULL

答案是,第二種更好。

為什么呢?為什么其他的比較都不用 IS 呢?比如想知道一個字段值是不是等于1,可以用一個簡單的 WHERE 子句:

WHERE SOME_COLUMN = 1

所以到底為什么對 NULL 區(qū)別對待使用 IS 呢?

因為:在 SQL 中,NULL 表示「未知」的意思,就是「未知」,不知道,不了解,未知?。ㄔ挠迷~:「unknown」)

NULL 是「未知」

在大多數數據庫中,NULL 和空字符串是有區(qū)別的。

但也有例外,比如在 Oracle 中,根本就不允許一個值是空字符串,Oracle 中所有的空字符串都會自動轉換成 NULL。

不過對于其他大多數數據庫來說,NULL 和空字符串是區(qū)別對待的:

  • 空字符串也是一種值,只不過是空的而已。
  • NULL 是一個「未知」值。(或者說是「未知」,沒有「值」的概念)

舉個例子,就好像問:美國總統(tǒng)西奧多·羅斯福的中間名是什么?

  • 一種回答可能是:我不知道西奧多·羅斯福的中間名是什么。(這種情況「中間名」字段就應該是 NULL)
  • 還有一種回答可能是:西奧多·羅斯福沒有中間名,他父母沒給他起中間名,我知道的事實就是西奧多·羅斯福沒有中間名。(這種情況「中間名」就應該為空字符串)

謹記 NULL 就是「未知」這個概念,就可以很容易處理一些使用 NULL 時可能遇到的麻煩。

比如下面的 WHERE 子句就會得到 true,那就能查到數據(如果數據庫有數據的話):

SELECT * FROM SOME_TABLE
WHERE 1 = 1

下面的子句會得到 false,永遠都查不到數據:

SELECT * FROM SOME_TABLE
WHERE 1 = 0

而下面的 WHERE 子句會得到 NULL,因為數據庫并不知道 1 和 NULL(「未知」)是什么關系,他們相等不相等,數據庫不清楚,所以 WHERE 子句得到的又是 NULL(「未知」)。所以下面的查詢永遠也不會返回任何數據。

SELECT * FROM SOME_TABLE
WHERE 1 = NULL

三元邏輯(原文為 Ternary Logic)

一個 SQL 語句中 WHERE 子句有三種不同的結果

  • true(會返回數據)
  • false(不會返回數據)
  • NULL(「未知」也不會返回數據)

好了,那既然 false 和 NULL 都不會返回數據,那干嘛還要關注它們的區(qū)別呢?

當遇上 NOT() 的時候就有問題了。

比如下面這個語句,1 肯定等于 1,顯然經過 NOT() 后就會變成 false,那就永遠不會返回數據。

SELECT * FROM SOME_TABLE
WHERE NOT(1 = 1)

下面這句呢,顯然 NOT() 后會得到 true,當然會返回數據。

SELECT * FROM SOME_TABLE
WHERE NOT(1 = 0)

但是這句呢?

SELECT * FROM SOME_TABLE
WHERE NOT(1 = NULL)

上面這句 1 = NULL 由于數據庫不知道 NULL 是什么,「未知」,所以其結果是 NULL。對 NOT() 來說呢,它也不知道 NULL 是什么,該怎么處理,所以也會返回 NULL,所以 WHERE 子句得到的是 NULL,既不是 true 也不是 false 而是 NULL,所以上面這條語句永遠都不會返回數據。

那么好了,看下面這兩條語句,雖然是相反的條件,但結果一致:都不會查詢到數據。

SELECT * FROM SOME_TABLE
WHERE NOT(1 = NULL)
SELECT * FROM SOME_TABLE
WHERE 1 = NULL

NOT IN 和 NULL

NOT IN 也是非常值得注意的。

比如下面這個 SQL,1 顯然在后面的列表中,WHERE 就會得到 true,那么就會查詢到數據。

SELECT * FROM SOME_TABLE
WHERE 1 IN (1, 2, 3, 4, NULL)

再看下面這句,顯然 1 是在數組中的,那么 NOT IN 就會得到 false,那么就不能查詢到數據。

SELECT * FROM SOME_TABLE
WHERE 1 NOT IN (1, 2, 3, 4, NULL)

再看這個:

SELECT * FROM SOME_TABLE
WHERE 5 NOT IN (1, 2, 3, 4, NULL)

先說答案:這句語句不能查詢到數據。

5 在不在后面的列表中呢?數據庫是不知道的,因為里面有個 NULL,誰知道 5 等不等于 NULL(「未知」),不知道,所以 5 NOT IN (1, 2, 3, 4, NULL) 得到的是 NULL,所以查詢不到數據。

小結:以上,NULL 就是 NULL,是「未知」,這樣一種概念的重要性就介紹完了。理解這一點,在構建復雜 SQL 時將很有用。

這些僅為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • 深入理解MySQL的數據庫引擎的類型

    深入理解MySQL的數據庫引擎的類型

    本篇文章是對MySQL的數據庫引擎的類型進行了詳細的分析介紹,需要的朋友參考下
    2013-06-06
  • Linux下mysql5.6.24(二進制)自動安裝腳本

    Linux下mysql5.6.24(二進制)自動安裝腳本

    這篇文章主要為大家詳細介紹了Linux環(huán)境下mysql5.6.24二進制自動安裝腳本,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • 詳細聊聊MySQL中的LIMIT語句

    詳細聊聊MySQL中的LIMIT語句

    大家應該都知道LIMIT子句可以被用于強制SELECT語句返回指定的記錄數,這篇文章主要給大家介紹了關于MySQL中LIMIT語句的相關資料,需要的朋友可以參考下
    2021-10-10
  • mysql心得分享:存儲過程

    mysql心得分享:存儲過程

    MySQL 5.0以后的版本開始支持存儲過程,存儲過程具有一致性、高效性、安全性和體系結構等特點,本文主要來分享下本人關于存儲過程的一些心得體會。
    2014-07-07
  • mysql解析json數據組獲取數據組所有字段的方法實例

    mysql解析json數據組獲取數據組所有字段的方法實例

    mysql在5.7開始支持json解析了,也可以解析數組,下面這篇文章主要給大家介紹了關于mysql解析json數據組獲取數據組所有字段的相關資料,文中通過圖文以及實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-08-08
  • 詳解MySQL Workbench使用教程

    詳解MySQL Workbench使用教程

    這篇文章主要介紹了詳解MySQL Workbench使用教程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-02-02
  • MySQL行列互換的實現示例

    MySQL行列互換的實現示例

    在MySQL中行轉列和列轉行都是非常有用的操作,本文主要介紹了MySQL行列互換的實現示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-06-06
  • MySQL中@i:=@i+1表達式用法詳解

    MySQL中@i:=@i+1表達式用法詳解

    這篇文章主要給大家介紹了關于MySQL中@i:=@i+1表達式用法的相關資料,文中通過實例代碼介紹的非常詳細,對大家學習或者使用mysql具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-08-08
  • linux 之centos7搭建mysql5.7.29的詳細過程

    linux 之centos7搭建mysql5.7.29的詳細過程

    這篇文章主要介紹了linux 之centos7搭建mysql5.7.29的詳細過程,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-05-05
  • 解析Mysql臨時表及特點

    解析Mysql臨時表及特點

    本篇文章是對Mysql中的臨時表以及特點進行了詳細的分析介紹,需要的朋友參考下
    2013-06-06

最新評論

怀柔区| 乐东| 蒙阴县| 凤阳县| 五指山市| 秭归县| 河西区| 古浪县| 禄劝| 金山区| 名山县| 西华县| 翁源县| 绥江县| 壶关县| 香河县| 祥云县| 葵青区| 丰宁| 宾川县| 游戏| 深圳市| 泰顺县| 温泉县| 姜堰市| 西贡区| 大竹县| 通许县| 佛山市| 互助| 察雅县| 广德县| 合川市| 盈江县| 满城县| 阿克苏市| 庆城县| 蕲春县| 长治县| 临江市| 延吉市|