久久精品国产亚洲高清|精品日韩中文乱码在线|亚洲va中文字幕无码久|伊人久久综合狼伊人久久|亚洲不卡av不卡一区二区|精品久久久久久久蜜臀AV|国产精品19久久久久久不卡|国产男女猛烈视频在线观看麻豆

    1. <style id="76ofp"></style>

      <style id="76ofp"></style>
      <rt id="76ofp"></rt>
      <form id="76ofp"><optgroup id="76ofp"></optgroup></form>
      1. 千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機構(gòu)

        手機站
        千鋒教育

        千鋒學(xué)習(xí)站 | 隨時隨地免費學(xué)

        千鋒教育

        掃一掃進入千鋒手機站

        領(lǐng)取全套視頻
        千鋒教育

        關(guān)注千鋒學(xué)習(xí)站小程序
        隨時隨地免費學(xué)習(xí)課程

        當(dāng)前位置:首頁  >  技術(shù)干貨  > is NULL和= NULL,is not NULL和!= NULL有什么區(qū)別?

        is NULL和= NULL,is not NULL和!= NULL有什么區(qū)別?

        來源:千鋒教育
        發(fā)布人:xqq
        時間: 2023-10-13 07:17:54 1697152674

        一、is NULL和= NULL的區(qū)別

        在 SQL 中,is NULL 用來判斷一個值是否為 NULL,它是一個布爾表達式,當(dāng)判斷對象為 NULL 時,返回 TRUE;否則返回 FALSE。例如:

        SELECT * FROM mytable WHERE mycolumn IS NULL;

        這條語句將會查詢 mytable 表中 mycolumn 列值為 NULL 的行。

        而 = NULL 則不同,因為在 SQL 中,NULL 不是一個常量,而是一個未知的值。因此,當(dāng)使用 = 操作符判斷某個值和 NULL 是否相等時,結(jié)果始終為 UNKNOWN。例如:

        SELECT * FROM mytable WHERE mycolumn = NULL;

        這條語句將返回空集,因為 mycolumn 列中的值無法確定是否等于 NULL。

        因此,在 SQL 中,應(yīng)該使用 is NULL 來判斷一個值是否為 NULL。

        二、is not NULL和!= NULL的區(qū)別

        在 SQL 中,is not NULL 是一個布爾表達式,當(dāng)判斷對象不為 NULL 時,返回 TRUE;否則返回 FALSE。例如:

        SELECT * FROM mytable WHERE mycolumn IS NOT NULL;

        這條語句將會查詢 mytable 表中 mycolumn 列值不為 NULL 的行。

        而 != NULL 則和 = NULL 一樣,因為 NULL 不是一個常量,而是一個未知的值。因此,當(dāng)使用 != 操作符判斷某個值和 NULL 是否不相等時,結(jié)果也始終為 UNKNOWN。例如:

        SELECT * FROM mytable WHERE mycolumn != NULL;

        這條語句將返回空集,因為 mycolumn 列中的值無法確定是否不等于 NULL。

        因此,在 SQL 中,應(yīng)該使用 is not NULL 來判斷一個值是否不為 NULL。

        三、SQL語言NULL值詳解

        1、簡介

        NULL 值代表遺漏的未知數(shù)據(jù)。默認地,表的列可以存放 NULL 值。如果表中的某個列是可選的,那么我們可以在不向該列添加值的情況下插入新記錄或更新已有的記錄。這意味著該字段將以 NULL 值保存。NULL 值的處理方式與其他值不同。NULL 用作未知的或不適用的值的占位符。

        注意:無法比較 NULL 和 0;它們是不等價的。

        2、特點

        null來表示未知和不確定:null 在計算機和編程世界中表示的是未知,不確定。雖然中文翻譯為“空”, 但此空(null)非彼空(empty)。null表示的是一種未知狀態(tài),未來狀態(tài),比如小明兜里有多少錢我不清楚,但也不能肯定為0,這時在計算機中就使用null來表示未知和不確定。null不支持大小/相等判斷:null表示的是什么都沒有,它與空字符串、0 這些是不等價的,是不能用于比較的! 如: 0 = null 、null = ” 、null>3、null!=’hehe’、null<10、age not in (10,20,null)、a!=’null’得到的結(jié)果為 false。

        正因為以上原因,要少用null。一方面不利于代碼的可讀性和可維護性,特別是強類型語言,查詢 INT 值,結(jié)果得到一個 NULL,程序可能會奔潰…如果要兼容這些情況程序往往需要多做很多操作來兜底。另一方面若所在列存在 null值,會影響 count()、 != 、null + 1 等查詢、統(tǒng)計、運算情景的結(jié)果。

        3、處理

        請看下面的 “Persons” 表:

        假如 “Persons” 表中的 “Address” 列是可選的。這意味著如果在 “Address” 列插入一條不帶值的記錄,”Address” 列會使用 NULL 值保存。那么我們?nèi)绾螠y試 NULL 值呢?無法使用比較運算符來測試 NULL 值,比如 =、< 或 <>。我們必須使用 IS NULL 和 IS NOT NULL 操作符。

        4、三元邏輯

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

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

        好了,那既然 false 和 NULL 都不會返回數(shù)據(jù),那干嘛還要關(guān)注它們的區(qū)別呢?當(dāng)遇上 NOT() 的時候就有問題了。比如下面這個語句,1 肯定等于 1,顯然經(jīng)過 NOT() 后就會變成 false,那就永遠不會返回數(shù)據(jù):

        SELECT * FROM SOME_TABLEWHERE NOT(1 = 1)

        下面這句呢,顯然 NOT() 后會得到 true,當(dāng)然會返回數(shù)據(jù):

        SELECT * FROM SOME_TABLEWHERE NOT(1 = 0)

        但是這句呢:

        SELECT * FROM SOME_TABLEWHERE NOT(1 = NULL)

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

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

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

        5、NOT IN 和 NULL

        NOT IN 也是非常值得注意的。比如下面這個 SQL,1 顯然在后面的列表中,WHERE 就會得到 true,那么就會查詢到數(shù)據(jù):

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

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

        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)

        先說答案:這句語句不能查詢到數(shù)據(jù)。5 在不在后面的列表中呢?數(shù)據(jù)庫是不知道的,因為里面有個 NULL,誰知道 5 等不等于 NULL(「未知」),不知道,所以 5 NOT IN (1, 2, 3, 4, NULL) 得到的是 NULL,所以查詢不到數(shù)據(jù)。

        延伸閱讀1:SQL語言NULL值相關(guān)函數(shù)

        ifnull():兩參數(shù),若名列前茅個參數(shù)不為空,返回該字段,若為空,返回第二個參數(shù)。coalesce():多參數(shù),返回名列前茅個非空值。nullif():該函數(shù)接受兩個參數(shù),相等則返回null,不相等則返回名列前茅個參數(shù)。
        聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
        10年以上業(yè)內(nèi)強師集結(jié),手把手帶你蛻變精英
        請您保持通訊暢通,專屬學(xué)習(xí)老師24小時內(nèi)將與您1V1溝通
        免費領(lǐng)取
        今日已有369人領(lǐng)取成功
        劉同學(xué) 138****2860 剛剛成功領(lǐng)取
        王同學(xué) 131****2015 剛剛成功領(lǐng)取
        張同學(xué) 133****4652 剛剛成功領(lǐng)取
        李同學(xué) 135****8607 剛剛成功領(lǐng)取
        楊同學(xué) 132****5667 剛剛成功領(lǐng)取
        岳同學(xué) 134****6652 剛剛成功領(lǐng)取
        梁同學(xué) 157****2950 剛剛成功領(lǐng)取
        劉同學(xué) 189****1015 剛剛成功領(lǐng)取
        張同學(xué) 155****4678 剛剛成功領(lǐng)取
        鄒同學(xué) 139****2907 剛剛成功領(lǐng)取
        董同學(xué) 138****2867 剛剛成功領(lǐng)取
        周同學(xué) 136****3602 剛剛成功領(lǐng)取
        相關(guān)推薦HOT
        Kettle連接MySQL為什么會報錯?

        一、Kettle連接MySQL會報錯的原因1、驅(qū)動程序缺失Kettle需要使用MySQL的JDBC驅(qū)動程序來連接MySQL數(shù)據(jù)庫。如果沒有正確配置或提供JDBC驅(qū)動程序,...詳情>>

        2023-10-13 08:53:41
        wait()、sleep()、join()和yield()區(qū)別是什么?

        一、wait()wait()方法是Object類中的方法,主要用于線程間的同步和協(xié)作。當(dāng)一個線程調(diào)用某個對象的wait()方法時,它會釋放該對象的鎖,并進入等...詳情>>

        2023-10-13 08:45:29
        什么是Caché數(shù)據(jù)庫?

        一、對象訪問通過對象訪問,開發(fā)人員可以使用面向?qū)ο蟮木幊陶Z言(如Java、C#等)直接操作數(shù)據(jù)庫中的對象。這種方式提供了更加直觀和便捷的數(shù)據(jù)...詳情>>

        2023-10-13 08:42:01
        mysql group commit為什么要保證binlog和redo log提交的順序一致?

        一、為什么要保證binlog和redo log提交的順序一致MySQL為了保證master和slave的數(shù)據(jù)一致性,就必須保證binlog和InnoDB redo日志的一致性(因為...詳情>>

        2023-10-13 08:25:24
        synchronized鎖的升級原理是什么,以及各個鎖的狀態(tài)對比?

        一、synchronized鎖的基本原理synchronized是Java中用于實現(xiàn)線程安全的關(guān)鍵字,它可以應(yīng)用于方法或代碼塊。當(dāng)一個線程進入synchronized代碼塊時...詳情>>

        2023-10-13 08:14:11
        快速通道
        平塘县| 吉安县| 肥西县| 莱阳市| 抚州市| 祁门县| 岳西县| 沧州市| 鄂尔多斯市| 新密市| 红原县| 手游| 彩票| 白水县| 中西区| 九龙城区| 潮州市| 东乡县| 汪清县| 本溪| 聂拉木县| 女性| 涪陵区| 盐山县| 云浮市| 富裕县| 浠水县| 牟定县| 友谊县| 南召县| 甘肃省| 石楼县| 木兰县| 逊克县| 睢宁县| 连山| 华亭县| 独山县| 新营市| 精河县| 乌鲁木齐县|