当前位置:网站首页>SQL中IS NOT NULL与!=NULL的区别
SQL中IS NOT NULL与!=NULL的区别
2022-06-27 21:06:00 【全栈程序员站长】
大家好,又见面了,我是你们的朋友全栈君。
平时经常会遇到这两种写法: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.cn/133155.html原文链接:https://javaforall.cn
边栏推荐
- Elk in Windows Environment - logstash+mysql (4)
- 通过 MQTT 检测对象和传输图像
- 【AI应用】NVIDIA Tesla V100S-PCIE-32GB的详情参数
- 【Try to Hack】veil-evasion免杀
- 用pytorch进行CIFAR-10数据集分类
- 【AI应用】NVIDIA GeForce RTX 1080Ti的详情参数
- 6G显卡显存不足出现CUDA Error:out of memory解决办法
- Started a natural language model bloom
- Discuz small fish game wind shadow legend business gbk+utf8 version template /dz game website template
- Is the dog virtue training with a monthly salary of 30000 a good business?
猜你喜欢

Is the dog virtue training with a monthly salary of 30000 a good business?

Teach you how to transplant tinyriscv to FPGA

clickonce 部署ClickOnce应用程序时出错-清单中的引用与下载的程序集的标识不匹配

c语言之字符串数组

圖的存儲結構

未能加载文件或程序集“CefSharp.Core.Runtime.dll”或它的某一个依赖项。 不是有效的 Win32 应用程序。 (异常来自 HRESULT:0x800700C1)
![[Blue Bridge Cup training 100 questions] scratch digital calculation Blue Bridge Cup competition special prediction programming question collective training simulation exercise question No. 16](/img/7c/d4ea8747ce45fd2eb59a8f968653db.png)
[Blue Bridge Cup training 100 questions] scratch digital calculation Blue Bridge Cup competition special prediction programming question collective training simulation exercise question No. 16

Introduction to quantitative trading

seata

MySQL十八:写语句的执行过程
随机推荐
Swing UI——容器(一)
Small chip chiplet Technology
Stream + Nacos
Stream + Nacos
云辅助隐私集合求交(Server-Aided PSI)协议介绍:学习
【数字IC/FPGA】检测最后一个匹配序列的位置
Aggregation and index optimization of mongodb basic operations
良/恶性乳腺肿瘤预测(逻辑回归分类器)
"Top stream Aidou manufacturing machine" cooperates with four industrial capitals to become LP
使用同花顺手机炒股安全吗?
The latest cloud development wechat balance charger special effect applet source code
向量召回和字面召回的选择与权衡
What problems should be paid attention to in the serpentine wiring of PCB?
webService
浙江大学课程攻略共享计划
[sword finger offer] 47 Maximum value of gifts
[从零开始学习FPGA编程-48]:视野篇 - 智能传感器的发展与应用
Netease cloud lost its "feelings" card
【微服务|Sentinel】sentinel数据持久化
C# Winform 读取Resources图片