【问题标题】:When is the NULL counted in the following SQL query以下 SQL 查询中何时计算 NULL
【发布时间】: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 &lt; 156 OR person.Height &gt;= 156 OR person.Height IS NULL(尽管这是一个毫无意义的子句)

标签: sql select count null where-clause


【解决方案1】:

如果person.height 列中有空值,那么这些行将不会被您的第一个查询计算在内。

这是因为 null 是一个标志而不是一个值,因此它不能为任何值比较运算符返回 true。因此,它既不大于、也不小于、也不等于任何东西(包括另一个 null)。唯一可以返回 TRUE 的测试是 person.height IS NULL

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多