oracle中count1和count*的区别-Oracle
Oracle 中 COUNT(1) 和 COUNT(*) 的区别
在 Oracle 中,COUNT(1) 和 COUNT(*) 都是用于计算表中记录数量的聚合函数,但二者之间存在着细微的区别。
COUNT(1)
- 仅计算非空值的行。
- 当表中存在空值时,它可以防止错误计数。
- 因为它忽略了空值,所以执行速度比 COUNT(*) 略快。
COUNT(*)
- 计算所有行,包括带空值的。
- 即使表中有空值,它也会返回准确的计数。
- 由于它包括了空值,所以执行速度可能比 COUNT(1) 稍慢。
选择使用哪一个?
选择 COUNT(1) 还是 COUNT(*) 取决于以下因素:
- 是否存在空值:如果表中可能存在空值,使用 COUNT(1) 以避免错误计数。
- 性能:如果速度至关重要,并且您确定表中没有空值,可以使用 COUNT(1)。
- 一致性:如果您希望跨所有行进行一致的计数,包括空值,则应使用 COUNT(*)。
示例
假设有一个名为 students 的表,其中包含以下数据:
| id | name | age | |---|---|---| | 1 | John | 20 | | 2 | NULL | 25 | | 3 | Mary | 22 |
登录后复制
如果使用 COUNT(1) 查询此表,它将返回以下结果:
SELECT COUNT(1) FROM students; 2
登录后复制
这是因为 COUNT(1) 忽略了 NULL 值。
如果使用 COUNT(*) 查询此表,它将返回以下结果:
SELECT COUNT(*) FROM students; 3
登录后复制
这是因为 COUNT(*) 包含了 NULL 值。