2024年09月05日 Oracle count * 与count 1 极客笔记
在 Oracle 数据库中,count(*)
和 count(1)
是两个常用的统计函数,用于统计表中的行数。虽然它们看起来很相似,但在实际使用中有一些微妙的区别。本文将详细讨论 count(*)
和 count(1)
的异同点,并且给出一些示例来帮助读者更好地理解它们。
count(*)
是一个聚合函数,用于统计表中的所有行数,包括包含 null
值的行。例如,以下查询将返回表 employees
中的所有行数:
SELECT count(*) FROM employees;
count(1)
也是一个聚合函数,与 count(*)
类似,用于统计表中的行数。不过,count(1)
是统计表中所有非空行的行数,null
值行不被统计。例如,以下查询将返回表 employees
中所有非空行的行数:
SELECT count(1) FROM employees;
在性能上,count(1)
会比 count(*)
稍微快一点。这是因为 count(1)
不需要去检查具体的列值是否为 null
,只需遍历行数即可。而 count(*)
需要遍历所有列的值,包括 null
和非 null
。
从语义的角度来看,count(1)
更直观一些。因为 count(*)
表示对所有列进行计数,有时候会引起歧义或误解。而 count(1)
明确地表示对行数进行计数,更容易理解。
在大多数情况下,count(*)
和 count(1)
可以互相替代。但在一些特殊情况下,需要根据具体情况选择合适的统计函数。例如,如果要统计某一列的非 null
值数量,可以使用 count(column_name)
。
假设有一张 employees
表,结构如下:
id | name | age | department |
---|---|---|---|
1 | Alice | 25 | HR |
2 | Bob | 30 | Finance |
3 | Charlie | Marketing | |
4 | David | 28 | Sales |
5 | 32 | Operations |
我们可以用以下示例来说明 count(*)
和 count(1)
的不同:
统计 employees
表中的行数:
SELECT count(*) AS TotalRows FROM employees;
输出:
TotalRows
---------
5
统计 employees
表中非 null
行的数量:
SELECT count(1) AS NonNullRows FROM employees;
输出:
NonNullRows
-----------
4
在实际使用中,count(*)
和 count(1)
是非常有用的统计函数,能够帮助我们快速统计表中的行数。虽然它们有一些微妙的区别,但通常可以互相替代。在选择使用哪个统计函数时,可以根据具体情况灵活选择,以便更好地满足需求。
本文链接:http://so.lmcjl.com/news/12322/