面试官:小伙子来面试啊?那你说说 select count(1) 和 select count(*)的区别吧。
回答:emmmm。。。好像就是查一下总数量,没啥区别吧。
面试官:好的,你回答的很好,今天的面试很愉快,你可以回家等消息了。 正文
从结果来说,二者的确实没啥区别。
select count(*) from tablea where xxxx=xxx
select count(1) from tablea where xxxx=xxx
那为啥会有1和*呢?不统一起来呢。
举一个例子
id | name |
---|---|
1 | A |
2 | b |
3 | c |
4 | (null) |
那么,select count(1) 和 select count(*) 的结果都是一样的,都是4。
再举个例子:
id | name |
---|---|
1 | A |
2 | b |
3 | c |
4 | (null) |
5 | d |
6 | e |
7 | f |
(null) | (null) |
那么 select count(*)的结果是 8
select count(1)的结果是7。
是不是有点规律了。
* :他会去根绝字段去统计,会包含null的结果。他会对每一行都会去计数。
1:而1呢,他不会去关注你有什么字段,1就是他的字段,他也不会去统计非空值的数量。
那么讲到这里,还有一个就是count(字段)。
count(字段):他也是算总数,会根据某一个字段去算,排除null的情况。
一般来说,count(*) 和 count(1) ,结果基本一样。除非你有全是null的结果,不过一般,现在的业务场景很少会出现这种情况。我们一般都会去设置主键,或者设置主键递增。
现在大家应该是清楚了,count的几种情况,