为什么在sql查询中需要使用xxx is null而不能使用xxx=null详解
2017-04-13 18:10
435 查看
应该大家都很清楚,我们在sql中要查询某列值为null的所有结果集时,查询条件应该这样写
select * from 表 where 字段 is null
而使用select * from 表 where 字段 = null是查不到正确的结果的。那这是为什么呢?要清楚为什么,就需要了解sql中的三值逻辑了。
在SQL中逻辑表达式的可能值包括TRUE、FALSE和UNKNOWN,它们被称之为三值逻辑。
我们知道,在其它的语言中,逻辑表达式只有两种,要么是true,要么就是false。而sql中却存在第三个逻辑表达式UnKnown,这个是sql中特有的。从字面意思上我们可以解理该值的意思是:什么都不知道,就是什么都不是。一般情况下我们将任何值(包括NULL本身)与NULL做比较的时候,都会返回UnKnown。而在查询表达式中(比如where与having中),UnKnown会视为false。所以我们就明白了为什么select * from 表 where 字段=null查不到正确的结果的原因了。
但并不是在所有场情下UnKnown都会视为false来处理,在check约束中,UnKnown就会视为true来处理。这就是为什么我们设置某个字段的值必须大于等于0的情况下,我们还可以往该字段中插入Null值,那是因为在check约束中null>=0的逻辑结果UnKnown会被当作true来处理。
需要注意的是,在分组子句与排序子句中,sql视null是相等的
即:
1,GROUP BY会把所有NULL值分到一组。
2,ORDER BY会把所有NULL值排列在一起。
select * from 表 where 字段 is null
而使用select * from 表 where 字段 = null是查不到正确的结果的。那这是为什么呢?要清楚为什么,就需要了解sql中的三值逻辑了。
在SQL中逻辑表达式的可能值包括TRUE、FALSE和UNKNOWN,它们被称之为三值逻辑。
我们知道,在其它的语言中,逻辑表达式只有两种,要么是true,要么就是false。而sql中却存在第三个逻辑表达式UnKnown,这个是sql中特有的。从字面意思上我们可以解理该值的意思是:什么都不知道,就是什么都不是。一般情况下我们将任何值(包括NULL本身)与NULL做比较的时候,都会返回UnKnown。而在查询表达式中(比如where与having中),UnKnown会视为false。所以我们就明白了为什么select * from 表 where 字段=null查不到正确的结果的原因了。
但并不是在所有场情下UnKnown都会视为false来处理,在check约束中,UnKnown就会视为true来处理。这就是为什么我们设置某个字段的值必须大于等于0的情况下,我们还可以往该字段中插入Null值,那是因为在check约束中null>=0的逻辑结果UnKnown会被当作true来处理。
需要注意的是,在分组子句与排序子句中,sql视null是相等的
即:
1,GROUP BY会把所有NULL值分到一组。
2,ORDER BY会把所有NULL值排列在一起。
相关文章推荐
- 为什么在sql查询中需要使用xxx is null而不能使用xxx=null详解
- 为什么在sql查询中需要使用xxx is null而不能使用xxx=null 详解
- sql语句查询时is not null 的使用
- 在使用Hibernate时,因为一个查询需要更多的表连接而要使用SQL来解决性能问题。然而返回的结果集中包含了没有映射的Entity类中的表字段,在这个SQL中还有使用如何将层次关系的父子结点显示为横行
- sqlserver isnull在数据库查询中的应用
- java.sql.SQLException: null, message from server: “Host ‘xxx’ is not allowed to connect
- sql查询 !='' 和 is not null的区别
- SQL2000系统表、存储过程、函数的功能介绍及应用2009年01月21日 星期三 11:38虽然使用系统存储过程、系统函数与信息架构视图已经可以为我们提供了相当丰富的元数据信息,但是对于某些特殊的元数据信息,我们仍然需要直接对系统表进行查询。因为SQL
- 远程mysql_java.sql.SQLException: null, message from server: "Host 'xxx' is not allowed to connect
- java.sql.SQLException: null, message from server: "Host 'xxx' is not allowed to connect
- java.sql.SQLException: null, message from server: "Host 'xxx' is not allowed to connect
- SQL 中 Null 值使用时需要注意的地方
- 一句SQL查询里是不能使用if else的
- Java中使用hql,sql查询返回的list<Object> 转成需要的实体对象--方法讲解!
- 关于在SSH框架整合时,使用hql语句查询出现 XXX is not mapped 的问题
- SQL:使用char,nchar查询时需要注意 【转】
- not in 不能使用在子查询结果为null
- sql 查询条件中需要使用 != 情况下的优化
- 使用struts2框架后servlet不能正常访问的解决方案 There is no Action mapped for action name null
- 使用hql当异常查询:Xxx is not mapped[from Xxx where ...]