我想知道以下4个简单查询在结果和功能方面的区别:
SELECT COUNT(*) FROM employees;
SELECT COUNT(0) FROM employees;
SELECT COUNT(1) FROM employees;
SELECT COUNT(2) FROM employees;
答案 0 :(得分:8)
这四个例子都评估为相同的数字 - 没有区别。
可能给出不同答案的是:
SELECT COUNT(middle_initial) FROM employees;
如果middle_initial
列中有任何带有NULL的条目,则返回的计数将与COUNT(*)
不同,因为它只是列中非空值的数量。 / p>
答案 1 :(得分:6)
在结果方面没有区别,它们都返回employees
中的行数。
COUNT(expression)
只是表示“对于此表中的每一行,如果expression
计算为非空值,则计算此行”。
但是,*
表示计算任何,而n
是一个常量数值,因此永远不会为空。因此,两者都没有考虑实际的行数据,因此返回表中的总行数。
答案 2 :(得分:2)
SELECT COUNT(x) FROM employees
会为您提供x
不是null
的行数。
答案 3 :(得分:1)
计数(*):
指定应计算所有行以返回表中的总行数。 COUNT(*)不带参数,不能与DISTINCT一起使用。 COUNT(*)不需要表达式参数,因为根据定义,它不使用有关任何特定列的信息。 COUNT(*)返回指定表中的行数而不删除重复项。它分别计算每一行。这包括包含空值的行。
因此,COUNT(*)返回组中的项目数。这包括NULL值和重复项。
总结。 Count(*)将返回查询中与where子句匹配的所有行。
所以,如果你去
从员工中选择COUNT(*)
行计数将返回,就像你去了
一样SELECT * FROM employees
将从表中返回所有行。
计数1,2,3和4
COUNT(*)计算查询生成的行数,而COUNT(1)计算1个值的数量。请注意,在查询中包含诸如数字或字符串之类的文字时,此文字将“附加”或附加到FROM子句生成的每一行。这也适用于聚合函数中的文字,例如COUNT(1)。对于Count(2),Count(3)和Count(4),可以说同样的情况。它将根据Count(变量)值的数量来计算表达式,并返回非null结果。
所以,如果你去
从emplyees中选择COUNT(1)
它将返回与您去的相同的行数
从员工中选择first_name
(其中first_name是表中的第1列)
然而,这里的优点是你可以去
从员工中选择COUNT(区分1)
然后它将返回表中该列的唯一记录计数。