select count(*)、count(1)、count(主键列)和count(包含空值的列)有何区别?
select count(*)、count(1)、count(主键列)和count(包含空值的列)有何区别?
在 SQL 中,
SELECT COUNT(*)、SELECT COUNT(1)、SELECT COUNT(主键列) 和 SELECT COUNT(包含空值的列) 都是用于统计记录数量的,但它们之间存在一些区别,下面为你详细解释:1. SELECT COUNT(*)
- 功能:
COUNT(*)会统计结果集中的所有记录数量,无论记录中的列是否包含NULL值。它将每一行视为一个有效的记录进行计数。 - 示例:
SELECT COUNT(*) FROM employees;
这个查询会返回
employees 表中的所有记录数。2. SELECT COUNT(1)
- 功能:
COUNT(1)与COUNT(*)功能基本相同,同样会统计结果集中的所有记录数量。这里的1可以看作是一个常量,数据库会为每一行生成一个1,然后对这些1进行计数。 - 示例:
SELECT COUNT(1) FROM employees;
这个查询也会返回
employees 表中的所有记录数。3. SELECT COUNT(主键列)
- 功能:
COUNT(主键列)会统计主键列中非NULL值的记录数量。由于主键列不允许有NULL值,所以COUNT(主键列)的结果通常与COUNT(*)和COUNT(1)相同。 - 示例:
SELECT COUNT(employee_id) FROM employees;
假设
employee_id 是 employees 表的主键,这个查询会返回 employees 表中的所有记录数。4. SELECT COUNT(包含空值的列)
- 功能:
COUNT(包含空值的列)会统计指定列中非NULL值的记录数量。也就是说,该列中为NULL的记录不会被计入统计结果。 - 示例:
SELECT COUNT(manager_id) FROM employees;
假设
manager_id 列中存在 NULL 值,这个查询只会统计 manager_id 列中非 NULL 值的记录数量。性能差异
在大多数数据库中,
COUNT(*) 和 COUNT(1) 的性能是相同的,因为它们都不涉及对列值的检查。而 COUNT(主键列) 和 COUNT(包含空值的列) 可能会稍微慢一些,因为数据库需要检查列值是否为 NULL。不过,具体的性能差异还会受到数据库系统、表结构、索引等因素的影响。总结
COUNT(*)和COUNT(1):统计所有记录数量,包括包含NULL值的记录。COUNT(主键列):统计主键列中非NULL值的记录数量,通常与COUNT(*)和COUNT(1)结果相同。COUNT(包含空值的列):统计指定列中非NULL值的记录数量,会排除该列中为NULL的记录。
浙公网安备 33010602011771号