在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)`执行效率更快一些。