欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SQL中IS NOT NULL與!=NULL的區(qū)別

 更新時間:2015年06月25日 11:43:09   投稿:junjie  
這篇文章主要介紹了SQL中IS NOT NULL與!=NULL的區(qū)別,本文詳細(xì)訴說了它們的區(qū)別,以及推薦使用方法,需要的朋友可以參考下

平時經(jīng)常會遇到這兩種寫法:IS NOT NULL與!=NULL。也經(jīng)常會遇到數(shù)據(jù)庫有符合條件!=NULL的數(shù)據(jù),但是返回為空集合。實際上,是由于對二者使用區(qū)別理解不透徹。

默認(rèn)情況下,推薦使用 IS NOT NULL去做條件判斷,因為SQL默認(rèn)情況下對WHERE XX!= Null的判斷會永遠(yuǎn)返回0行,卻不會提示語法錯誤。

這是為什么呢?

SQL Server文檔中對Null值的比較運(yùn)算定義了兩種規(guī)則,如在SQL Server 2000中:

規(guī)則一是是ANSISQL(SQL-92)規(guī)定的Null值的比較取值結(jié)果都為False,既Null=Null取值也是False。另一種不準(zhǔn)循ANSISQL標(biāo)準(zhǔn),即Null=Null為True。:

例如數(shù)據(jù)表test結(jié)構(gòu):

復(fù)制代碼 代碼如下:

ROWNUM     DATA
-------------------
1     'Liu Yang'
2     Null
3     '12345'

按照ANSI SQL標(biāo)準(zhǔn),下面的兩個查詢都不返回任何行:

查詢一: SELECT * FROM test WHERE data=NULL
查詢二: SELECT * FROM test WHERE data<>NULL

而按照非ANSI SQL標(biāo)準(zhǔn),查詢1將返回第二行,查詢2返回1、3行。

這是因為在SQL中,NULL是一種特有的數(shù)據(jù)類型,其等價于沒有任何值、是未知數(shù)。NULL與0、空字符串、空格都不同。
ANSI SQL標(biāo)準(zhǔn)中取得Null值的行需要用下面的查詢:

復(fù)制代碼 代碼如下:

SELECT * FROM test WHERE data IS NULL

由此可見非ANSI SQL標(biāo)準(zhǔn)中data=NULL等同于data IS NULL,data<>NULL等同于data IS NOT NULL。

所以我們要牢記:默認(rèn)情況下做比較條件時使用關(guān)鍵字“is null”和“is not null”。

如果你一定要使用!= null來進(jìn)行條件判斷,需要加上這個命令語句:SET ANSI_NULLS OFF,這時數(shù)據(jù)庫進(jìn)入ANSI SQL非標(biāo)準(zhǔn)模式,你會發(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]命令也可以實現(xiàn)標(biāo)準(zhǔn)的切換,只是這個命令控制的是一組符合SQL-92標(biāo)準(zhǔn)的設(shè)置,其中就包括Null值的標(biāo)準(zhǔn)。

默認(rèn)情況下,數(shù)據(jù)庫管理程序(DB-Library)是SET ANSI_NULLS為OFF的。但是我們的大多數(shù)應(yīng)用程序,都是通過ODBC或者OLEDB來訪問數(shù)據(jù)庫的,作為一種開放兼容的數(shù)據(jù)庫訪問程序,或許是兼容性的考慮,SETANSI_NULLS值設(shè)置為ON。這樣一來帶來的一些問題是需要注意的。像存儲過程或者自定義函數(shù)這樣的應(yīng)用程序都是基于DB-Library的,默認(rèn)情況下,SETANSI_NULLS為OFF,并且在這樣的程序中,不能使用SETANSI_NULLS在一個環(huán)境中修改規(guī)則,只能修改數(shù)據(jù)庫配置參數(shù)。

例如下面這種情況:你的應(yīng)用程序使用ADODB來訪問數(shù)據(jù)庫,采用OleDb或者ODBC數(shù)據(jù)提供程序。對于查詢一: SELECT * FROM test WHERE data=NULL
我們可以直接發(fā)送命令取得查詢結(jié)果集,也可把它放到存儲過程當(dāng)中。但二者查詢結(jié)果不同。若直接使用查詢命令,不返回任何行;而如果訪問存儲過程,返回第2行的數(shù)據(jù)。

最后,我們再次聲明:數(shù)據(jù)庫默認(rèn)情況下,做SQL條件查詢比較時使用關(guān)鍵字“is null”和“is not null”。

相關(guān)文章

  • Doris?數(shù)據(jù)模型ROLLUP及前綴索引官方教程

    Doris?數(shù)據(jù)模型ROLLUP及前綴索引官方教程

    本文檔主要從邏輯層面,描述 Doris 的數(shù)據(jù)模型 ROLLUP 以及前綴索引的概念,以幫助用戶更好的使用 Doris 應(yīng)對不同的業(yè)務(wù)場景,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • MySQL mysqldump命令使用詳解

    MySQL mysqldump命令使用詳解

    MySQL有很多可以導(dǎo)入數(shù)據(jù)的方法,然而這些只是數(shù)據(jù)傳輸中的一半,另外的一般是從MySQL數(shù)據(jù)庫中導(dǎo)出數(shù)據(jù)。有許多的原因我們需要導(dǎo)出數(shù)據(jù)。一個重要的原因是用于備份數(shù)據(jù)庫。數(shù)據(jù)的造價常常是昂貴的,需要謹(jǐn)慎處理它們。
    2006-12-12
  • 數(shù)據(jù)庫中刪除語句Drop、Delete、Truncate的相同點和不同點的比較(實例說明)

    數(shù)據(jù)庫中刪除語句Drop、Delete、Truncate的相同點和不同點的比較(實例說明)

    數(shù)據(jù)庫中刪除語句Drop、Delete、Truncate的相同點和不同點的比較,通過舉例說明讓大家了解
    2012-09-09
  • 樹形結(jié)構(gòu)數(shù)據(jù)庫表Schema設(shè)計的兩種方案

    樹形結(jié)構(gòu)數(shù)據(jù)庫表Schema設(shè)計的兩種方案

    程序設(shè)計過程中,我們常常用樹形結(jié)構(gòu)來表征某些數(shù)據(jù)的關(guān)聯(lián)關(guān)系,如企業(yè)上下級部門、欄目結(jié)構(gòu)、商品分類等等,下面這篇文章主要給大家介紹了關(guān)于樹形結(jié)構(gòu)數(shù)據(jù)庫表Schema設(shè)計的兩種方案,需要的朋友可以參考下
    2021-09-09
  • JMeter對數(shù)據(jù)庫的查詢操作步驟詳解

    JMeter對數(shù)據(jù)庫的查詢操作步驟詳解

    這篇文章主要詳細(xì)說明,使用JDBC Request組件,如何對數(shù)據(jù)庫進(jìn)行查詢的各種操作,重點是JMeter中查詢語句的操作步驟,通過實例代碼講解,需要的朋友可以參考下
    2021-06-06
  • JetBrains出品一款好用到爆的DataGrip數(shù)據(jù)庫工具使用入門

    JetBrains出品一款好用到爆的DataGrip數(shù)據(jù)庫工具使用入門

    這篇文章主要介紹了JetBrains出品一款好用到爆的DataGrip數(shù)據(jù)庫工具使用入門,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • SQL SERVER 與ACCESS、EXCEL的數(shù)據(jù)轉(zhuǎn)換

    SQL SERVER 與ACCESS、EXCEL的數(shù)據(jù)轉(zhuǎn)換

    SQL SERVER 與ACCESS、EXCEL的數(shù)據(jù)轉(zhuǎn)換...
    2007-02-02
  • 一文詳解SQL中為什么不要使用1=1

    一文詳解SQL中為什么不要使用1=1

    很多時候使用where 1=1 可以很方便的解決我們的問題,但是這樣很可能會造成非常大的性能損失,這篇文章主要給大家介紹了關(guān)于SQL中為什么不要使用1=1的相關(guān)資料,需要的朋友可以參考下
    2024-03-03
  • Navicat11全系列激活教程圖文詳解(Navicat注冊機(jī))

    Navicat11全系列激活教程圖文詳解(Navicat注冊機(jī))

    這篇文章主要介紹了Navicat11全系列激活教程圖文詳解(注冊機(jī)),本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • clickhouse數(shù)據(jù)庫刪除數(shù)據(jù)的五種方式

    clickhouse數(shù)據(jù)庫刪除數(shù)據(jù)的五種方式

    clickhouse數(shù)據(jù)庫清理數(shù)據(jù)的方式很多,每種方式都各有自己的優(yōu)缺點,請根據(jù)實際需要采用適合自己的方式,本文將逐一給大家介紹,并通過代碼示例講解的非常詳細(xì),需要的朋友可以參考下
    2024-03-03

最新評論