在 Oracle 中,COUNT()
, COUNT(1)
, 和 COUNT(*)
都是用于计算行数的聚合函数,但它们在使用时有一些细微的差别。下面是这三者的详细解释:
1. COUNT(*)
- 用途:
COUNT(*)
返回查询结果中的所有行数,包括包含NULL
值的行。 - 性能:通常,
COUNT(*)
会返回表中所有行的总数,不考虑列的值。 - 例子:
这会返回表中所有行的总数,不管某一列是否为SELECT COUNT(*) FROM employees;
NULL
。
2. COUNT(1)
- 用途:
COUNT(1)
计算查询中所有行的数量。1
是一个常数,表示每一行都会被计数。 - 性能:和
COUNT(*)
一样,COUNT(1)
返回所有行的数量,1
在计算时不依赖于任何特定列的值,因此在大多数数据库实现中,它的性能与COUNT(*)
没有显著区别。 - 例子:
这也会返回表中所有行的总数,与SELECT COUNT(1) FROM employees;
COUNT(*)
类似。
3. COUNT(column)
- 用途:
COUNT(column)
计算该列中非NULL
的行数。如果某列的值为NULL
,那么该行就不会被计数。 - 性能:
COUNT(column)
会排除NULL
值的行,只计算该列中实际有值的行。 - 例子:
这会返回表中SELECT COUNT(salary) FROM employees;
salary
列非NULL
的行数。如果有员工的salary
为NULL
,这些员工不会被计数。
总结:
COUNT(*)
:计数所有行,包含NULL
的行。COUNT(1)
:计数所有行,实际上与COUNT(*)
在大多数情况下是一样的。COUNT(column)
:计数指定列中非NULL
的行。
通常来说,COUNT(*)
用得最多,因为它计算了表中所有的行数,而COUNT(column)
则适用于只计算某一列非 NULL
值的情况。