我有一个表ABC
,EMPLID
,GRADE
,SALARY
和DATE
作为其字段。
我正在执行以下3条陈述:
select count(*) from ABC;
结果: - 458
select count(*) from ABC where GRADE LIKE '%def%';
结果: - 0
select count(*) from ABC where GRADE NOT LIKE '%def%';
结果: - 428
我的观点是:第二个查询的结果加上第三个查询的结果应该等于第一个查询的结果,不应该吗?
答案 0 :(得分:7)
看起来你有30条记录,其中GRADE是null
。
null
值未知,因此请勿与这两种情况匹配。
答案 1 :(得分:3)
Sql使用三值逻辑:true,false和amp。unknown。如果将NULL与任何其他值进行比较,则结果未知。 NOT(未知)仍然未知。
WHERE子句仅返回计算结果为true的行。因此,示例中缺少的30行在“成绩”列中具有NULL。
答案 2 :(得分:2)