SQL:比较和空值

时间:2013-07-25 16:26:14

标签: sql null comparison operators

这是我正在使用的代码:

SELECT 'HOPE', RPRAWRD_AIDY_CODE, COUNT(DISTINCT RPRAWRD_PIDM) AS NumberOfStudents,  Sum(RPRAWRD_PAID_AMT) AS AmountPaid
FROM FAISMGR.RPRAWRD, FAISMGR.RFRBASE
WHERE RPRAWRD_AIDY_CODE = '1213'
     AND RPRAWRD_FUND_CODE = RFRBASE_FUND_CODE
     AND RPRAWRD_AWST_CODE = 'ACPT'
     AND RPRAWRD_PAID_AMT > 0 
     AND RFRBASE_FSRC_CODE = 'HOPE'
GROUP BY RPRAWRD_AIDY_CODE;

结果共有3952条记录。

一些记录在RPRAWRD_PAID_AMT中包含NULL,如果我添加

AND RPRAWRD_PAID_AMT IS NOT NULL

到WHERE子句,我得到完全相同的结果:3952条记录。所以,我的问题是:> 0是否排除空值,因为它们评估为false,使得IS NOT NULL不必要?

2 个答案:

答案 0 :(得分:1)

RPRAWRD_PAID_AMT > 0 
如果true的值大于RPRAWRD_PAID_AMT

将仅返回0。与null相比,结果为unknown,这也是false

所以,是的,您不需要额外的null检查。

答案 1 :(得分:0)

SQL中NULL上的大多数操作返回NULL,在条件句中评估为false。

mysql> SELECT NULL > 0;
+----------+
| NULL > 0 |
+----------+
|     NULL |
+----------+
1 row in set (0.00 sec)

所以是的,RPRAWRD_PAID_AMT > 0将过滤掉空值,但明确不会有害。