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

解讀mysql中的null問(wèn)題

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

mysql的null問(wèn)題

(1) 使用統(tǒng)計(jì)函數(shù)的時(shí)候會(huì)出現(xiàn)null值得情況

在這里插入圖片描述

注意點(diǎn) sum avg max min 都有可能出現(xiàn)為null的問(wèn)題 而且 sum avg max min count(具體字段) 都會(huì)忽略null的數(shù)據(jù) count(*) 不會(huì)忽略null數(shù)據(jù)

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

在這里插入圖片描述

(3)sum()函數(shù)實(shí)現(xiàn)統(tǒng)計(jì)指定字段值之和,在具體統(tǒng)計(jì)時(shí)將忽略NULL值,但是不會(huì)忽略0值

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

(5)distinct數(shù)據(jù)丟失

在這里插入圖片描述

(6)select數(shù)據(jù)丟失

在這里插入圖片描述

(7)group by 會(huì)讓null值獨(dú)立分組

在這里插入圖片描述

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

在這里插入圖片描述

建表的時(shí)候盡量設(shè)置默認(rèn)值(0或者’')

SQL中的NULL你真的懂了嗎?

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

查詢(xún)某列值為 NULL 的數(shù)據(jù)

當(dāng)想查詢(xún)某一列值為 NULL 的數(shù)據(jù)時(shí),下面兩種哪個(gè)更好呢?

SELECT * FROM SOME_TABLE
WHERE SOME_COLUMN = NULL

還是

SELECT * FROM SOME_TABLE
WHERE SOME_COLUMN IS NULL

答案是,第二種更好。

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

WHERE SOME_COLUMN = 1

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

因?yàn)椋涸?SQL 中,NULL 表示「未知」的意思,就是「未知」,不知道,不了解,未知!(原文用詞:「unknown」)

NULL 是「未知」

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

但也有例外,比如在 Oracle 中,根本就不允許一個(gè)值是空字符串,Oracle 中所有的空字符串都會(huì)自動(dòng)轉(zhuǎn)換成 NULL。

不過(guò)對(duì)于其他大多數(shù)數(shù)據(jù)庫(kù)來(lái)說(shuō),NULL 和空字符串是區(qū)別對(duì)待的:

  • 空字符串也是一種值,只不過(guò)是空的而已。
  • NULL 是一個(gè)「未知」值。(或者說(shuō)是「未知」,沒(méi)有「值」的概念)

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

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

謹(jǐn)記 NULL 就是「未知」這個(gè)概念,就可以很容易處理一些使用 NULL 時(shí)可能遇到的麻煩。

比如下面的 WHERE 子句就會(huì)得到 true,那就能查到數(shù)據(jù)(如果數(shù)據(jù)庫(kù)有數(shù)據(jù)的話(huà)):

SELECT * FROM SOME_TABLE
WHERE 1 = 1

下面的子句會(huì)得到 false,永遠(yuǎn)都查不到數(shù)據(jù):

SELECT * FROM SOME_TABLE
WHERE 1 = 0

而下面的 WHERE 子句會(huì)得到 NULL,因?yàn)閿?shù)據(jù)庫(kù)并不知道 1 和 NULL(「未知」)是什么關(guān)系,他們相等不相等,數(shù)據(jù)庫(kù)不清楚,所以 WHERE 子句得到的又是 NULL(「未知」)。所以下面的查詢(xún)永遠(yuǎn)也不會(huì)返回任何數(shù)據(jù)。

SELECT * FROM SOME_TABLE
WHERE 1 = NULL

三元邏輯(原文為 Ternary Logic)

一個(gè) SQL 語(yǔ)句中 WHERE 子句有三種不同的結(jié)果

  • true(會(huì)返回?cái)?shù)據(jù))
  • false(不會(huì)返回?cái)?shù)據(jù))
  • NULL(「未知」也不會(huì)返回?cái)?shù)據(jù))

好了,那既然 false 和 NULL 都不會(huì)返回?cái)?shù)據(jù),那干嘛還要關(guān)注它們的區(qū)別呢?

當(dāng)遇上 NOT() 的時(shí)候就有問(wèn)題了。

比如下面這個(gè)語(yǔ)句,1 肯定等于 1,顯然經(jīng)過(guò) NOT() 后就會(huì)變成 false,那就永遠(yuǎn)不會(huì)返回?cái)?shù)據(jù)。

SELECT * FROM SOME_TABLE
WHERE NOT(1 = 1)

下面這句呢,顯然 NOT() 后會(huì)得到 true,當(dāng)然會(huì)返回?cái)?shù)據(jù)。

SELECT * FROM SOME_TABLE
WHERE NOT(1 = 0)

但是這句呢?

SELECT * FROM SOME_TABLE
WHERE NOT(1 = NULL)

上面這句 1 = NULL 由于數(shù)據(jù)庫(kù)不知道 NULL 是什么,「未知」,所以其結(jié)果是 NULL。對(duì) NOT() 來(lái)說(shuō)呢,它也不知道 NULL 是什么,該怎么處理,所以也會(huì)返回 NULL,所以 WHERE 子句得到的是 NULL,既不是 true 也不是 false 而是 NULL,所以上面這條語(yǔ)句永遠(yuǎn)都不會(huì)返回?cái)?shù)據(jù)。

那么好了,看下面這兩條語(yǔ)句,雖然是相反的條件,但結(jié)果一致:都不會(huì)查詢(xún)到數(shù)據(jù)。

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

NOT IN 和 NULL

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

比如下面這個(gè) SQL,1 顯然在后面的列表中,WHERE 就會(huì)得到 true,那么就會(huì)查詢(xún)到數(shù)據(jù)。

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

再看下面這句,顯然 1 是在數(shù)組中的,那么 NOT IN 就會(huì)得到 false,那么就不能查詢(xún)到數(shù)據(jù)。

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

再看這個(gè):

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

先說(shuō)答案:這句語(yǔ)句不能查詢(xún)到數(shù)據(jù)。

5 在不在后面的列表中呢?數(shù)據(jù)庫(kù)是不知道的,因?yàn)槔锩嬗袀€(gè) NULL,誰(shuí)知道 5 等不等于 NULL(「未知」),不知道,所以 5 NOT IN (1, 2, 3, 4, NULL) 得到的是 NULL,所以查詢(xún)不到數(shù)據(jù)。

小結(jié):以上,NULL 就是 NULL,是「未知」,這樣一種概念的重要性就介紹完了。理解這一點(diǎn),在構(gòu)建復(fù)雜 SQL 時(shí)將很有用。

這些僅為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 深入理解MySQL的數(shù)據(jù)庫(kù)引擎的類(lèi)型

    深入理解MySQL的數(shù)據(jù)庫(kù)引擎的類(lèi)型

    本篇文章是對(duì)MySQL的數(shù)據(jù)庫(kù)引擎的類(lèi)型進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • Linux下mysql5.6.24(二進(jìn)制)自動(dòng)安裝腳本

    Linux下mysql5.6.24(二進(jìn)制)自動(dòng)安裝腳本

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

    詳細(xì)聊聊MySQL中的LIMIT語(yǔ)句

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

    mysql心得分享:存儲(chǔ)過(guò)程

    MySQL 5.0以后的版本開(kāi)始支持存儲(chǔ)過(guò)程,存儲(chǔ)過(guò)程具有一致性、高效性、安全性和體系結(jié)構(gòu)等特點(diǎn),本文主要來(lái)分享下本人關(guān)于存儲(chǔ)過(guò)程的一些心得體會(huì)。
    2014-07-07
  • mysql解析json數(shù)據(jù)組獲取數(shù)據(jù)組所有字段的方法實(shí)例

    mysql解析json數(shù)據(jù)組獲取數(shù)據(jù)組所有字段的方法實(shí)例

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

    詳解MySQL Workbench使用教程

    這篇文章主要介紹了詳解MySQL Workbench使用教程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • MySQL行列互換的實(shí)現(xiàn)示例

    MySQL行列互換的實(shí)現(xiàn)示例

    在MySQL中行轉(zhuǎn)列和列轉(zhuǎn)行都是非常有用的操作,本文主要介紹了MySQL行列互換的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-06-06
  • MySQL中@i:=@i+1表達(dá)式用法詳解

    MySQL中@i:=@i+1表達(dá)式用法詳解

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

    linux 之centos7搭建mysql5.7.29的詳細(xì)過(guò)程

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

    解析Mysql臨時(shí)表及特點(diǎn)

    本篇文章是對(duì)Mysql中的臨時(shí)表以及特點(diǎn)進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06

最新評(píng)論

同德县| 长垣县| 宜兰市| 外汇| 天津市| 奉化市| 夏邑县| 大港区| 福海县| 昆山市| 息烽县| 神池县| 明光市| 辛集市| 凤城市| 南陵县| 余江县| 宿州市| 运城市| 汾阳市| 弥渡县| 望江县| 隆德县| 兖州市| 西乌珠穆沁旗| 社旗县| 延庆县| 星子县| 鸡西市| 兴海县| 涟水县| 丰顺县| 山东省| 定日县| 长宁区| 宣威市| 恩施市| 石台县| 北碚区| 临夏市| 太仓市|