Mysql版本:8.0.26
可视化客户端:sql yog
表达式
COUNT(expression)
描述
返回查询的记录总数,expression 参数是一个字段或者 * 号
举例说明
①准备表数据
代码示例如下:
SELECT COUNT(username) FROM USER;
ps:
MySQL在Windows下不区分大小写,但在Linux下默认是区分大小写。 因此,数据库名、表名、字段名,都不允许出现任何大写字母,避免节外生枝。
区别
count(*)包括了所有的列,相当于行数,在统计结果的时候,不会忽略为NULL的值
count(常量)包括了所有的列,比如用1代表代码行,在统计结果的时候,不会忽略为NULL的值。
count(列名)只包括列名那一列,在统计结果的时候,会忽略列值为空(这里的空不是指空字符串或者0,而是表示null)的计数,即某个字段值为NULL时,不统计。
不信?请看如下案例演示
①准备表数据
②sql代码测试(以字段id与name举例)
使用count(*) 与 count(常量) 查询统计
查询user表中所有的记录行数
代码示例如下:
a. 使用count(*)查询统计
SELECT COUNT(*) FROM USER;
SELECT COUNT(1) FROM USER;
使用count函数统计列name与id
代码示例如下:
a. 使用count(name) 查询统计列name的总记录数【2条】
SELECT COUNT(NAME) FROM USER;
b. 使用count(id) 查询统计列id的总记录数【4条】
SELECT COUNT(id) FROM USER;
③why?
原因
从下图中表user中的数据来看,列name下有效【非NULL】的字段值共有两行,无效【为NULL】的字段值共有两条,而列id下有效【非NULL】的字段值共有四行,没有无效【为NULL】的字段值
区别
列名为主键,count(列名)会比count(1)快
列名不为主键,count(1)会比count(列名)快
如果表多个列并且没有主键,则 count(1) 的执行效率优于 count(*)
如果有主键,则 select count(主键)的执行效率是最优的
如果表只有一个字段,则 select count(*)最优