为什么没有表名的MySQL计数为1

为什么没有表名的MySQL计数为1,mysql,Mysql,您能解释一下为什么mysqlcount函数不提供任何表名,而将1作为值吗 SELECT COUNT(*); 结果:1 因为在mysql中选择常量\u值命令有效(例如选择2将返回2)并返回1行。不带group by的Count()函数将折叠resultset并计算resultset中的项数。在这种情况下,将返回1行和count(*)计数。通常所有选择的形式都是从[表或表的联接等]中选择[列、列上的标量计算、列上的分组计算或标量计算] 因为这允许简单的标量计算,所以我们可以从SomeTable中选

您能解释一下为什么mysqlcount函数不提供任何表名,而将1作为值吗

SELECT COUNT(*);
结果:1


因为在mysql中
选择常量\u值
命令有效(例如
选择2
将返回2)并返回1行。不带group by的Count()函数将折叠resultset并计算resultset中的项数。在这种情况下,将返回1行和count(*)计数。

通常所有选择的形式都是从[表或表的联接等]中选择[列、列上的标量计算、列上的分组计算或标量计算]

因为这允许简单的标量计算,所以我们可以从SomeTable中选择1+1,它将返回一个记录集,其中SomeTable中的每一行的值为2

现在,如果我们不关心任何表,只想进行标量计算,那么我们可能需要执行类似于选择1+1的操作。标准不允许这样做,但它很有用,而且大多数数据库都允许这样做(Oracle不允许这样做,除非最近对其进行了更改,至少以前不允许这样做)

因此,此类裸选择被视为具有from子句,该子句指定了一个只有一行而没有列的表(当然不可能,但它做到了这一点)。因此,SELECT 1+1变为SELECT 1+1 FROM ImaginaryTableWithOneRow,它返回一行和一列的值为2

大多数情况下,我们不考虑这一点,我们只是习惯于裸选择会给出结果,甚至不考虑必须选择某一行才能返回一行的事实

在执行SELECT COUNT()时,您执行了与ImaginaryTableWithOneRow中的SELECT COUNT()等效的操作,后者当然返回1

可能的重复: