国产睡熟迷奷白丝护士系列精品,中文色字幕网站,免费h网站在线观看的,亚洲开心激情在线

      <sup id="hb9fh"></sup>
          1. 千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機(jī)構(gòu)

            手機(jī)站
            千鋒教育

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

            千鋒教育

            掃一掃進(jìn)入千鋒手機(jī)站

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

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

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

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

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

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

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

            SELECT * FROM mytable WHERE mycolumn IS NULL;

            這條語(yǔ)句將會(huì)查詢 mytable 表中 mycolumn 列值為 NULL 的行。

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

            SELECT * FROM mytable WHERE mycolumn = NULL;

            這條語(yǔ)句將返回空集,因?yàn)?mycolumn 列中的值無(wú)法確定是否等于 NULL。

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

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

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

            SELECT * FROM mytable WHERE mycolumn IS NOT NULL;

            這條語(yǔ)句將會(huì)查詢 mytable 表中 mycolumn 列值不為 NULL 的行。

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

            SELECT * FROM mytable WHERE mycolumn != NULL;

            這條語(yǔ)句將返回空集,因?yàn)?mycolumn 列中的值無(wú)法確定是否不等于 NULL。

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

            三、SQL語(yǔ)言NULL值詳解

            1、簡(jiǎn)介

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

            注意:無(wú)法比較 NULL 和 0;它們是不等價(jià)的。

            2、特點(diǎn)

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

            正因?yàn)橐陨显?,要少用null。一方面不利于代碼的可讀性和可維護(hù)性,特別是強(qiáng)類型語(yǔ)言,查詢 INT 值,結(jié)果得到一個(gè) NULL,程序可能會(huì)奔潰…如果要兼容這些情況程序往往需要多做很多操作來(lái)兜底。另一方面若所在列存在 null值,會(huì)影響 count()、 != 、null + 1 等查詢、統(tǒng)計(jì)、運(yùn)算情景的結(jié)果。

            3、處理

            請(qǐng)看下面的 “Persons” 表:

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

            4、三元邏輯

            一個(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í)候就有問題了。比如下面這個(gè)語(yǔ)句,1 肯定等于 1,顯然經(jīng)過(guò) NOT() 后就會(huì)變成 false,那就永遠(yuǎn)不會(huì)返回?cái)?shù)據(jù):

            SELECT * FROM SOME_TABLEWHERE NOT(1 = 1)

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

            SELECT * FROM SOME_TABLEWHERE NOT(1 = 0)

            但是這句呢:

            SELECT * FROM SOME_TABLEWHERE 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ì)查詢到數(shù)據(jù)。

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

            5、NOT IN 和 NULL

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

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

            再看下面這句,顯然 1 是在數(shù)組中的,那么 NOT IN 就會(huì)得到 false,那么就不能查詢到數(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ǔ)句不能查詢到數(shù)據(jù)。5 在不在后面的列表中呢?數(shù)據(jù)庫(kù)是不知道的,因?yàn)槔锩嬗袀€(gè) NULL,誰(shuí)知道 5 等不等于 NULL(「未知」),不知道,所以 5 NOT IN (1, 2, 3, 4, NULL) 得到的是 NULL,所以查詢不到數(shù)據(jù)。

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

            ifnull():兩參數(shù),若名列前茅個(gè)參數(shù)不為空,返回該字段,若為空,返回第二個(gè)參數(shù)。coalesce():多參數(shù),返回名列前茅個(gè)非空值。nullif():該函數(shù)接受兩個(gè)參數(shù),相等則返回null,不相等則返回名列前茅個(gè)參數(shù)。
            聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
            10年以上業(yè)內(nèi)強(qiáng)師集結(jié),手把手帶你蛻變精英
            請(qǐng)您保持通訊暢通,專屬學(xué)習(xí)老師24小時(shí)內(nèi)將與您1V1溝通
            免費(fèi)領(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為什么會(huì)報(bào)錯(cuò)?

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

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

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

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

            一、對(duì)象訪問通過(guò)對(duì)象訪問,開發(fā)人員可以使用面向?qū)ο蟮木幊陶Z(yǔ)言(如Java、C#等)直接操作數(shù)據(jù)庫(kù)中的對(duì)象。這種方式提供了更加直觀和便捷的數(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日志的一致性(因?yàn)?..詳情>>

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

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

            2023-10-13 08:14:11
            快速通道