【发布时间】:2021-02-02 08:10:50
【问题描述】:
我遇到了两个查询,并认为这两个查询的含义会导致相同的答案。但是,如果由于 NULL,答案似乎是错误的。但我不确定这两个结果会如何不同。
查询 A
select count(*)
from person
where person.height < 156 or person.height => 156;
和
查询 B
select count(*)
from person;
我知道 select count(*) 意味着在打印的同时还计算 NULL。但是,我不确定当同时给出 where 条件时是否会有任何不同。
【问题讨论】:
-
第一个查询过滤正在计数的行。第二个不是。您为什么认为它们会返回相似的结果?
-
count(*)计算行数。count(col)计算非空值。 -
@GordonLinoff 很好......因为
where条件基本上包含所有数字,我认为where是否存在并不重要......所以我认为两者都会显示相同的结果.. 对吗? -
@Learner_15 你知道 where 条件是查询两个不同的列吗?
-
即使您的 where 条件包含所有数字,但它不包含
NULL的任何逻辑,因此任何具有NULL年龄的行都不会被计算在内,而它们会在第二个查询。为了使您的两个查询具有可比性,请将第二个查询更改为SELECT COUNT(age) FROM Person,或将您的第一个 where 子句更改为where person.height < 156 OR person.Height >= 156 OR person.Height IS NULL(尽管这是一个毫无意义的子句)
标签: sql select count null where-clause