为什么没有表名的MySQL COUNT给出1

时间:2016-02-23 11:56:44

标签: mysql

你可以解释为什么mysql count 功能而不提供任何表格名称 1 作为价值?

SELECT COUNT(*);

结果: 1

enter image description here

2 个答案:

答案 0 :(得分:2)

因为在mysql body { counter-reset: objgen; } .general::before { content: counter(objgen) ; counter-increment: objgen; } .general { counter-reset: objesp; font-weight: bold; } .esp::before { content: counter(objgen) "." counter(objesp); counter-increment: objesp; } .esp { font-weight: bold; } 命令有效(例如select constant_value将返回2)并且将返回1行。不带group by的Count()函数将折叠结果集并计算结果集中的项数。在这种情况下,将返回1行,count(*)计算该行。

答案 1 :(得分:0)

通常所有选择的形式都是SELECT [列,列上的标量计算,列上的分组计算或标量计算] FROM [表或表的连接等]

因为这允许简单的标量计算,我们可以执行类似SELECT 1 + 1 FROM SomeTable的操作,并且它将为表SomeTable中的每一行返回值为2的记录集。

现在,如果我们不关心任何表格,但只是想做我们的标量计算,我们可能想做一些像SELECT 1 + 1这样的事情。标准不允许这样做,但它是有用的,大多数数据库允许它(甲骨文不会,除非它最近改变了,至少它不习惯)。

因此,这些简单的SELECT被视为具有一个from子句,该子句指定了一个包含一行而没有列的表(当然不可能,但它可以解决问题)。因此,SELECT 1 + 1变为SELECT 1 + 1 FROM ImaginaryTableWithOneRow,它返回一行,其中一列的值为2.

大多数情况下我们都没有考虑过这个问题,我们只是习惯了这样一个事实,即明确的SELECT会给出结果,甚至不会想到必须选择一些单行的东西才能返回一个行。

在执行SELECT COUNT()时,你做了相同的SELECT COUNT()FROM ImaginaryTableWithOneRow,当然返回1.

Reference