`count1` 和 `count` 在 SQL 中都用于计数,但它们有一些区别:
count(列名)
用于统计某一列中非 NULL 值的数量。
例如,如果统计 `employees` 表中 `department` 列的非 NULL 值数量,可以使用 `SELECT count(department) FROM employees;`,结果是 3,因为只有 3 个员工的部门是非 NULL 的。
count(1)
实际上是统计表中所有行的数量,和 `count(*)` 非常相似。
这里的 1 只是一个常数,并不影响计数结果。
在大多数数据库系统中,包括 MySQL,`count(1)` 和 `count(*)` 的性能差异非常小,数据库引擎会对这两种查询进行优化,使它们的执行效率几乎一样。
从语义上来说,`count(*)` 表示统计所有行,不管列是什么;而 `count(1)` 表示对每一行都计数。
count(*)
用于统计表中所有行的数量,包括含有 NULL 值的行。
例如,`SELECT count(*) FROM employees;` 会返回表中的总行数,假设表中有 4 行数据,结果是 4。
建议
在实际开发中,通常使用 `count(*)`,因为它更直观,表示“统计所有行”。
`count(1)` 有时候在一些老旧的数据库系统中可能会见到,但在现代数据库中,两者的差异几乎可以忽略不计。
如果需要统计某一列中非 NULL 值的数量,使用 `count(列名)` 更为明确和直观。