十年網(wǎng)站開(kāi)發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶(hù) + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專(zhuān)業(yè)推廣+無(wú)憂(yōu)售后,網(wǎng)站問(wèn)題一站解決
今天就跟大家聊聊有關(guān)SQL中IS NOT NULL與!=NULL的區(qū)別是什么,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

成都創(chuàng)新互聯(lián)是一家專(zhuān)注于成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作與策劃設(shè)計(jì),興縣網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)做網(wǎng)站,專(zhuān)注于網(wǎng)站建設(shè)十年,網(wǎng)設(shè)計(jì)領(lǐng)域的專(zhuān)業(yè)建站公司;建站業(yè)務(wù)涵蓋:興縣等地區(qū)。興縣做網(wǎng)站價(jià)格咨詢(xún):18982081108
查詢(xún)一: SELECT * FROM test WHERE data=NULL
查詢(xún)二: SELECT * FROM test WHERE data<>NULL
而按照非ANSI SQL標(biāo)準(zhǔn),查詢(xún)1將返回第二行,查詢(xún)2返回1、3行。
這是因?yàn)樵赟QL中,NULL是一種特有的數(shù)據(jù)類(lèi)型,其等價(jià)于沒(méi)有任何值、是未知數(shù)。NULL與0、空字符串、空格都不同。
ANSI SQL標(biāo)準(zhǔn)中取得Null值的行需要用下面的查詢(xún):
復(fù)制代碼 代碼如下:
SELECT * FROM test WHERE data IS NULL
由此可見(jiàn)非ANSI SQL標(biāo)準(zhǔn)中data=NULL等同于data IS NULL,data<>NULL等同于data IS NOT NULL。
所以我們要牢記:默認(rèn)情況下做比較條件時(shí)使用關(guān)鍵字“is null”和“is not null”。
如果你一定要使用!= null來(lái)進(jìn)行條件判斷,需要加上這個(gè)命令語(yǔ)句:SET ANSI_NULLS OFF,這時(shí)數(shù)據(jù)庫(kù)進(jìn)入ANSI SQL非標(biāo)準(zhǔn)模式,你會(huì)發(fā)現(xiàn)IS NOT NULL 和 != null 是等效的了。
這里使用的是模式切換命令SET ANSI_NULLS[ON/OFF]。ON值采用ANSI SQL嚴(yán)格標(biāo)準(zhǔn),OFF值采用非標(biāo)準(zhǔn)兼容模式。另外SET ANSI_DEFAULTS [ON/OFF]命令也可以實(shí)現(xiàn)標(biāo)準(zhǔn)的切換,只是這個(gè)命令控制的是一組符合SQL-92標(biāo)準(zhǔn)的設(shè)置,其中就包括Null值的標(biāo)準(zhǔn)。
默認(rèn)情況下,數(shù)據(jù)庫(kù)管理程序(DB-Library)是SET ANSI_NULLS為OFF的。但是我們的大多數(shù)應(yīng)用程序,都是通過(guò)ODBC或者OLEDB來(lái)訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)的,作為一種開(kāi)放兼容的數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)程序,或許是兼容性的考慮,SETANSI_NULLS值設(shè)置為ON。這樣一來(lái)帶來(lái)的一些問(wèn)題是需要注意的。像存儲(chǔ)過(guò)程或者自定義函數(shù)這樣的應(yīng)用程序都是基于DB-Library的,默認(rèn)情況下,SETANSI_NULLS為OFF,并且在這樣的程序中,不能使用SETANSI_NULLS在一個(gè)環(huán)境中修改規(guī)則,只能修改數(shù)據(jù)庫(kù)配置參數(shù)。
例如下面這種情況:你的應(yīng)用程序使用ADODB來(lái)訪(fǎng)問(wèn)數(shù)據(jù)庫(kù),采用OleDb或者ODBC數(shù)據(jù)提供程序。對(duì)于查詢(xún)一: SELECT * FROM test WHERE data=NULL
我們可以直接發(fā)送命令取得查詢(xún)結(jié)果集,也可把它放到存儲(chǔ)過(guò)程當(dāng)中。但二者查詢(xún)結(jié)果不同。若直接使用查詢(xún)命令,不返回任何行;而如果訪(fǎng)問(wèn)存儲(chǔ)過(guò)程,返回第2行的數(shù)據(jù)。
看完上述內(nèi)容,你們對(duì)SQL中IS NOT NULL與!=NULL的區(qū)別是什么有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。