Oracle count(*)与count(1)

2024年09月05日 Oracle count * 与count 1 极客笔记

Oracle count(*)与count(1)

在 Oracle 数据库中,count(*)count(1) 是两个常用的统计函数,用于统计表中的行数。虽然它们看起来很相似,但在实际使用中有一些微妙的区别。本文将详细讨论 count(*)count(1) 的异同点,并且给出一些示例来帮助读者更好地理解它们。

count(*) 和 count(1) 的基本用法

count(*)

count(*) 是一个聚合函数,用于统计表中的所有行数,包括包含 null 值的行。例如,以下查询将返回表 employees 中的所有行数:

SELECT count(*) FROM employees;

count(1)

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) 的不同:

示例 1

统计 employees 表中的行数:

SELECT count(*) AS TotalRows FROM employees;

输出:

TotalRows
---------
5

示例 2

统计 employees 表中非 null 行的数量:

SELECT count(1) AS NonNullRows FROM employees;

输出:

NonNullRows
-----------
4

结论

在实际使用中,count(*)count(1) 是非常有用的统计函数,能够帮助我们快速统计表中的行数。虽然它们有一些微妙的区别,但通常可以互相替代。在选择使用哪个统计函数时,可以根据具体情况灵活选择,以便更好地满足需求。

本文链接:http://so.lmcjl.com/news/12322/

展开阅读全文