查看文章 |
A database null in a table column has a special meaning -- the value of the column is not currently known (missing), however its value may be known at a later time. A database null may represent any value in the future, but the value is not available at this time. Since two null columns may eventually be assigned different values, one null can't be compared to another in the conventional way. The following syntax is illegal in SQL: WHERE qty = NULL A special comparison operator -- IS NULL, tests a column for null. It has the following general format: value-1 IS [NOT] NULL This comparison returns true if value-1 contains a null and false otherwise. The optional NOT reverses the result: value-1 IS NOT NULL is equivalent to: NOT value-1 IS NULL For example, SELECT * FROM sp WHERE qty IS NULL
. 【SQL定义】SQL中, NULL 与空格, 零, 都不相同. 是指为未定义或是不可用的. 构成因素:造成某一列成为NULL 的因素可能是: (1),值不存在; (2), 值未知; (3), 列对表不可用.
相同点: 2:都是合法的值,普通的数字,字符可以存在于表中字段,null也可以,而且是有意义的.
不同点: 插入相关测试值: values('2',null)
结论:查询后发现b的值没有变化,仍然为null.
2:普通的值可以进行"="操作,例如条件中一般都会这样出现:sUserName='张三',如果sUserName的值为null,要想找出所有名字为null的记录时,不能这样用:sUserName=null,因为null不是一个具体的值,任何值与它比较时都会返回false.此时可借用is null 或者是is not null.
示例查询: 1:select * from testNull where a=null --返回空结果集 结论:说明null是不能用"="来比较,可用is null来替换
3:在用统计函数count时会不同,例如count(ID):统计记录数.当统计的记录中的包含有null值时,它会忽略null值. 示例查询:
1:select count(*),count(b) from testNull 它的返回值为2 1 结论:对于列包含null 时,统计行数是可用count(*),或者是先把null值转换成对应的值再统计,例如count(isnull(b,''));
4:对于in 的影响不同. 示例查询: 查询testNull表中b的值包含在null中的记录.
select * from testNull 5:排序时顺序有不同:当使用ORDER BY时,首先呈现NULL值。如果你用DESC以降序排序,NULL值最后显示。 2 2 NULL
6:当使用GROUP BY时,所有的NULL值被认为是相等的。这时先多插入几条数据,方便查看结果. 结论:可见在group by 的时候,null视为等同.
7:永远不会有什么数据等于NULL。1不等于NULL,2也一样。但NULL也不等于NULL。所以我们只能比较它“是”或“不是”。 总结:SQL中提供了如此众多的存储过程,函数供我们调用,而我们又真正的理解几个呢?只有真正了解它们,才会对开发中出现的种种问题迅速找出问题所在并解决它. Reference and more: http://www.w3schools.com/SQL/sql_null_values.asp
|