sql查询中的null
来源:互联网 发布:centos开机启动命令 编辑:程序博客网 时间:2024/05/16 07:40
在以前做机房收费系统的时候,遇到一个问题查询是null指的数据,是这样写的
select * from student where id=null
数据库明明是有数据的,但是却查询不出来。当时不知道内部执行到底是怎样的,所以也就放弃了。后来在学习中慢慢明白了其中的原理,也就一直没有记录下来。现在说一下其中的原理。
如果一个字段没有被赋值,那么它的值就是null,null值并不代表没有值,而是表示值是未知的,只是这个值我们暂时还不知道。
由于null在数据库是比较特殊的,所以涉及到null的一些处理中也会存在一些需要注意的地方:
NULL与比较运算符
因为null表示未知的值,因此在使用比较运算符的时候就需要注意null值可能造成的Bug。
比如下面的sql语句
select * from t_employee t wheret.fsalary<5000;
这句sql语句是查询不出来fsalary字段值为null的数据的,因为null值代表的是未知,那么用未知的数和5000比较,能说未知的数小于5000么?显然不能。
那这样呢
select * from t_employee t wheret.fsalary<5000 or ft. fsalary>=5000;
这样写也是不行的。未知的数显然不符合小于5000或者大于等于5000的。
那么如何查询出来fsalary字段中的null值呢?
select * from t_employee t where t. fsalaryis null;
这样就能查询出来我们想要的结果。
NULL和计算字段
select t.fid,t.fsalary+2000 from t_employee;
执行完这个sql语句就会发现,原来fsalary字段为null的值,经过计算以后,值还是为null。
原理还是这样,因为未知的数加上2000得到的结果仍然是未知的。
所以如果null值出现在任何计算字段中,得到的结果永远为null。
NULL和聚合函数
和普通的函数不同,如果null值出现在聚合函数中,那么NULL值将会被忽略,可以用聚合函数max来进行试验。
select max(t.salary) from t_employee t;
按照前面的逻辑分析,一个包含NULL值在内的所有员工工资的最大值和最小值应该是未知的null,不过聚合函数是一个例外,null值会被忽略,这是需要特别注意的地方。
- sql查询中的null
- SQL中的NULL详解
- SQL中的NULL值
- sql 中的null值
- SQL中的NULL值
- SQL中的null
- SQL查询空和NULL
- SQL 字段为NULL查询
- LINQ TO SQL Null 查询
- LINQ TO SQL Null 查询 .
- LINQ TO SQL Null 查询
- 子查询中的NULL问题
- JAVA与SQL 中的null与NULL
- Mybatis中sql语句中的in查询,一定要判断null的情况
- 【详解】SQL中的联表查询(NOT IN与IS NULL)
- SQL中的NULL的处理
- Sql Server中的Null值
- 深入详解SQL中的Null
- EditView属性介绍
- uvaoj-12474:大理石在哪里
- 猴年总结及规划
- zabbix安装部署(服务器端)
- iOS基础:深入理解Objective-c中@class的含义
- sql查询中的null
- Android开发学习之路--Content Provider之初体验
- iOS面试题四
- Android资源文件assets和raw的比较
- 关于Canvas的一些用法
- java.net.ConnectException: failed to connect to /127.0.1.1 (port 8080)的解决办法
- stm32之GPIO的理解
- 帆软报表学习-快速入门
- 框架学习