空值的比较是比较古怪的!比如在between语句中,不过也是符合逻辑的。
如有学生表:
000001 黎明 1 1976-11-23 00:00:00 NULL
000002 赵怡春 0 1979-12-31 00:00:00 1.78
000003 张富平 1 1975-05-20 00:00:00 1.8099999
000004 白丽 0 1976-01-30 00:00:00 1.76
000005 牛玉德 1 1979-03-17 00:00:00 1.74
000006 姚华 0 1972-10-01 00:00:00 1.75
000007 李*南 1 1977-10-01 00:00:00 1.76
有如下查询:
查询身高介于所有学号比他小的学生最小身高和1.76之间的学生信息:
select * from stu as a where height between (select min(height) from stu as b where number<a.number) and 1.76
显示为:
000006 姚华 0 1972-10-01 00:00:00 1.75
000007 李*南 1 1977-10-01 00:00:00 1.76
说明:
000002号学生没有命中,原因在于学号比其小的学生身高为null,而他的身高为1.78,此时的1.78大于between语句的上限1.76,所以此记录不满足条件。
如果将000002号学生身高设为1.74,仍然没有显示,原因在于学号比其小的学生身高为null,而他的身高为1.74,小于between语句的上限1.76,比较结果返回null,而空值是作为假来处理的。这就是“如果定义范围下限的表达式生成一个null值,那么如果测试值比上限大,between测试则返回false。否则,返回null”。
[此贴子已经被作者于2010-12-13 19:48:11编辑过]