首页 > 数据库技术 > 详细

SQL中null、空查询及0分析

时间:2020-03-03 10:09:19      阅读:61      评论:0      收藏:0      [点我收藏+]

/*
对于null,
即是可以查询到记录的,null不能做常见运算,如相加、相乘、判断是否相等。
在计算时,要isnull(字段名,0)或isnull(字段名,‘其他‘)再做计算。 */


-- 错误的:
-- 没有统计进bd_code为null的

select
temp00.name0,
temp01.num0
from
temp00
left join
temp01
on
temp00.bd_code=temp01.bd_code


-- 正确定:
-- 将bd_code为为null的归为一类
select
temp00.name0,
temp01.num0
from
temp00
left join
temp01
on
isnull(temp00.bd_code,‘‘)=isnull(temp01.bd_code,‘‘)







/*
对于0
常见错误为,0作为分母。 */



-- 错误的:
with
temp00 as(
select
sum(实收) num0
from
实收表),
temp01 as(
select
sum(应收) num1
from
应收表)

select
temp00.实收/temp01.应收 actu_num
from
temp00
left join
temp01
on 1=1



-- 正确的:
with
temp00 as(
select
sum(实收) num0
from
实收表),
temp01 as(
select
sum(应收) num1
from
应收表)

select
case
when temp01.应收=0
then 0
else
temp00.实收/temp01.应收
end actu_num
from
temp00
left join
temp01
on 1=1




/*
对于空查询,
也就是没有查询记录,即使你用isnull转换也没用,他没有查询记录。
没有查询记录再进行计算,当然是null的。 */


-- 错误的
with
temp00 as(
select
sum(基本工资) num0
from
工资表),
temp01 as(
select
sum(加班工资) num1
from
加班表)

select
temp00.num0+temp01.num1  actu_num
from
temp00
left join
temp01
on 1=1


-- 正确的
with
temp00 as(
select
sum(基本工资) num0
from
工资表
union all
select 0 num0),
temp01 as(
select
sum(加班工资) num1
from
加班表
union  all
select 0 num1)

select
sum(temp00.num0)+sum(temp01.num1)  actu_num
from
temp00
left join
temp01
on 1=1

SQL中null、空查询及0分析

原文:https://www.cnblogs.com/linyuansun/p/12400446.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!