WEB开发网
开发学院数据库MSSQL Server SQL开发中容易忽视的一些小地方(一) 阅读

SQL开发中容易忽视的一些小地方(一)

 2010-04-28 15:42:44 来源:WEB开发网   
核心提示:1:普通的值一般都可能进行运算符操作,例如:ID列为int,所以可以这样:ID=ID+1等,但如果一列的值为null,null+1=null,就是说null与任何运算符运算后都为null,这就是大家说的黑洞,会吃掉所有的东西.update testNullset b=b+1where b is null结论:查询后发现

1:普通的值一般都可能进行运算符操作,例如:ID列为int,所以可以这样:ID=ID+1等,但如果一列的值为null,null+1=null,就是说null与任何运算符运算后都为null,这就是大家说的黑洞,会吃掉所有的东西.

update testNull

set b=b+1

where b is null

结论:查询后发现b的值没有变化,仍然为null.

2:普通的值可以进行"="操作,例如条件中一般都会这样出现:sUserName='张三',如果sUserName的值为null,要想找出所有名字为null的记录时,不能这样用:sUserName=null,因为null不是一个具体的值,任何值与它比较时都会返回false.此时可借用is null 或者是is not null.

示例查询:

1:select * from testNull where a=null --返回空结果集

2:select * from testNull where b is null --返回结果集 2 2 NULL

结论:说明null是不能用"="来比较,可用is null来替换

3:在用统计函数count时会不同,例如count(ID):统计记录数.当统计的记录中的包含有null值时,它会忽略null值.

示例查询:

1:select count(*),count(b) from testNull 它的返回值为2 1

2:select count(*),count(isnull(b,'')) from testNull 它的返回值为2 2

结论:对于列包含null 时,统计行数是可用count(*),或者是先把null值转换成对应的值再统计,例如count(isnull(b,''));

4:对于in 的影响不同.

示例查询:查询testNull表中b的值包含在null中的记录.

select * from testNull

where b in(null) --没有任何记录

结论:in在查询时会忽略null的记录,查询的时候可用is not null来查询.

5:排序时顺序有不同:当使用ORDER BY时,首先呈现NULL值。如果你用DESC以降序排序,NULL值最后显示。

1:select * from testNull

1 1 ''

2 2 NULL

2:select * from testNull order by b

2 2 NULL

1 1 ''

3:select * from testNull order by b desc

1 1 ''

上一页  1 2 3 4 5  下一页

Tags:SQL 开发 容易

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接