为什么null列与count aggragate函数的行为不同?

Ant*_*ink 1 sql oracle

在oracle中,我们有一个任务来计算具有特定空列的行数.

我有查询:

select count(MY_COL) from My_Table where MY_COL is null;
Run Code Online (Sandbox Code Playgroud)

这会返回零结果.

为什么这会返回零结果和查询

select count(*) from My_Table where MY_COL is null;
Run Code Online (Sandbox Code Playgroud)

返回正确的结果?

Ren*_*ger 6

两个结果都是正确的.

select count(col_name)计算在记录col_name不为空,而select count(*)计数的所有记录的,无论任何空值.

这在大溪地记录:

如果指定expr,则COUNT将返回expr不为null的行数.您可以计算所有行,也可以只计算expr的不同值.

如果指定星号(*),则此函数返回所有行,包括重复行和空值.

COUNT永远不会返回null.