SQL中IS NOT NULL与!=NULL的区别

SQL中IS NOT NULL与!=NULL的区别平时经常会遇到这两种写法:ISNOTNULL与!=NULL。也经常会遇到数据库有符合条件!=NULL的数据,但是返回为空集合。实际上,是由于对二者使用区别理解不透彻。默认情况下,推荐使用ISNOTNULL去做条件判断,因为SQL默认情况下对WHEREXX!=Null的判断会永远返回0行,却不会提示语法错误。这是为什么呢?SQLServer文档中对Null值的

大家好,又见面了,我是你们的朋友全栈君。

平时经常会遇到这两种写法:IS NOT NULL与!=NULL。也经常会遇到数据库有符合条件!=NULL的数据,但是返回为空集合。实际上,是由于对二者使用区别理解不透彻。

默认情况下,推荐使用 IS NOT NULL去做条件判断,因为SQL默认情况下对WHERE XX!= Null的判断会永远返回0行,却不会提示语法错误。

这是为什么呢?

SQL Server文档中对Null值的比较运算定义了两种规则,如在SQL Server 2000中:

规则一是是ANSISQL(SQL-92)规定的Null值的比较取值结果都为False,既Null=Null取值也是False。另一种不准循ANSISQL标准,即Null=Null为True。:

例如数据表test结构:

复制代码代码如下:

ROWNUM     DATA

——————-

1     ‘Liu Yang’

2     Null

3     ‘12345’



按照ANSI SQL标准,下面的两个查询都不返回任何行:

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

而按照非ANSI SQL标准,查询1将返回第二行,查询2返回1、3行。

这是因为在SQL中,NULL是一种特有的数据类型,其等价于没有任何值、是未知数。NULL与0、空字符串、空格都不同。
ANSI SQL标准中取得Null值的行需要用下面的查询:

复制代码代码如下:

SELECT * FROM test WHERE data IS NULL



由此可见非ANSI SQL标准中data=NULL等同于data IS NULL,data<>NULL等同于data IS NOT NULL。

所以我们要牢记:默认情况下做比较条件时使用关键字“is null”和“is not null”。

如果你一定要使用!= null来进行条件判断,需要加上这个命令语句:SET ANSI_NULLS OFF,这时数据库进入ANSI SQL非标准模式,你会发现IS NOT NULL 和 != null 是等效的了。

这里使用的是模式切换命令SET ANSI_NULLS[ON/OFF]。ON值采用ANSI SQL严格标准,OFF值采用非标准兼容模式。另外SET ANSI_DEFAULTS [ON/OFF]命令也可以实现标准的切换,只是这个命令控制的是一组符合SQL-92标准的设置,其中就包括Null值的标准。

默认情况下,数据库管理程序(DB-Library)是SET ANSI_NULLS为OFF的。但是我们的大多数应用程序,都是通过ODBC或者OLEDB来访问数据库的,作为一种开放兼容的数据库访问程序,或许是兼容性的考虑,SETANSI_NULLS值设置为ON。这样一来带来的一些问题是需要注意的。像存储过程或者自定义函数这样的应用程序都是基于DB-Library的,默认情况下,SETANSI_NULLS为OFF,并且在这样的程序中,不能使用SETANSI_NULLS在一个环境中修改规则,只能修改数据库配置参数。

例如下面这种情况:你的应用程序使用ADODB来访问数据库,采用OleDb或者ODBC数据提供程序。对于查询一: SELECT * FROM test WHERE data=NULL
我们可以直接发送命令取得查询结果集,也可把它放到存储过程当中。但二者查询结果不同。若直接使用查询命令,不返回任何行;而如果访问存储过程,返回第2行的数据。

最后,我们再次声明:数据库默认情况下,做SQL条件查询比较时使用关键字“is null”和“is not null”。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/133155.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 不招女人喜欢的男人15个细节

    不招女人喜欢的男人15个细节我喜欢成熟型的,我喜欢阳光型的,我喜欢温柔体贴的,身边的朋友诉说着自己的择偶要求,对于将来的另一半,总是充满着幻想,充满着期待,可是很多细节问题,女的很注意,哪怕,另一半属于这个类型,因为细节问题,也不会选择他作为,托付终身的选择。一:啰嗦一天到晚,听着他唠叨,把一件事情,从早晨念到晚上,虽然知道他是为自己好,可是不能忍受,自己的老公那么鸡婆,和一个女的一样…

    2022年7月25日
    8
  • HTML5实现IP Camera网页输出

    HTML5实现IP Camera网页输出

    2022年1月26日
    67
  • C ReadProcessMemory

    C ReadProcessMemoryReadProcessMemory函数用于读取其他进程的数据。BOOLSTDCALLReadProcessMemory( HANDLE hProcess, LPCVOID lpBaseAddress, LPVOID lpBuffer, DWORD nSize, LPDWORD lpNumberOfBytesRead ){ NTSTATUSStatus…

    2022年10月4日
    1
  • python保存文件的几种方式「建议收藏」

    python保存文件的几种方式「建议收藏」当我们获取到一些数据时,例如使用爬虫将网上的数据抓取下来时,应该怎么把数据保存为不同格式的文件呢?下面会分别介绍用python保存为txt、csv、excel甚至保存到mongodb数据库中文件的方法。保存为txt文件首先我们模拟数据是使用爬虫抓取下来的,抓取的下来的数据大致就是这样的下面使用代码保存为txt文件importrequestsfromlxmlimportetr…

    2022年4月19日
    92
  • 去重和简单遍历

    去重和简单遍历去重和简单遍历

    2022年4月24日
    48
  • 快播创始人王欣成立人工智能公司[通俗易懂]

    快播创始人王欣成立人工智能公司[通俗易懂]快播创始人王欣成立人工智能公司

    2022年4月20日
    60

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号