在MySQL中,筛选非空的时候经常会用到 is not null 和 !=null(或<>null),这两种方法单从字面上来看感觉是差不多的,其实如果去运行一下试试的话差别会很大!

在SQL中,NULL是一种特有的数据类型,其等价于没知有任何值、是未知数。NULL与0、空道字符串、空格都不同。SQL默认情况下对WHERE XX!= Null的判断会永远返回0行,却不会提示语法错误。

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

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


为什么会出现这种情况呢?

null 表示什么也不是, 不能=、>、< … 所有的判断,结果都是false,所有只能用 is null进行判断。

默认情况下,推荐使用 IS NOT NULL去判断,因为SQL默认情况下对 != Null 的判断会永远返回 0 行,但没有语法错误。

如果你一定想要使用 != Null 来判断,需要加上这个语句:

SET ANSI_NULLS off

这时你会发现 IS NOT NULL 和 != null 是等效的。

 

阿里巴巴怎么说?

【强制】使用 ISNULL()来判断是否为 NULL 值。

说明:NULL 与任何值的直接比较都为 NULL。

1)NULL<>NULL 的返回结果是 NULL,而不是 false。

2)NULL=NULL 的返回结果是 NULL,而不是 true。

3)NULL<>1 的返回结果是 NULL,而不是 true。

反例:在 SQL 语句中,如果在 null 前换行,影响可读性。select * from table where column1 is null and column3 is not null; 而`ISNULL(column)`是一个整体,简洁易懂。从性能数据上分析,`ISNULL(column)`执行效率更快一些。 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐