一尘不染

在mySQL / SQL中count(0),count(1)..和count(*)之间有什么区别?

sql

最近在一次采访中有人问我这个问题。我在mySQL中尝试过,并得到了相同的结果(最终结果)。全部给出了该特定表中的行数。任何人都可以解释它们之间的主要区别。


阅读 164

收藏
2021-03-17

共1个答案

一尘不染

除非您在表格中指定字段或在括号内指定表达式,而不是常量值或*,否则什么也没做

让我给您一个详细的答案。计数将为您提供给定字段的非空记录号。假设您有一个名为A的表

select 1 from A
select 0 from A
select * from A

都将返回相同数量的记录,即表A中的行数。输出仍然不同。如果表中有3条记录。使用X和Y作为字段名称

select 1 from A will give you

1
1
1

select 0 from A will give you
0
0
0

select * from A will give you ( assume two columns X and Y is in the table )
X      Y
--     --
value1 value1
value2 (null)
value3 (null)

因此,所有三个查询都返回相同的数字。除非你用

select count(Y) from A

由于只有一个非空值,您将获得1作为输出

2021-03-17