SQL SELECT: select count(*), count(1) e count(nome) — a batalha das funções count no SQL
Introdução: SQL SELECT e função count()
Quando vamos usar count no banco de dados nos deparamos com várias opções do SQL, conheça as diferenças entre as várias possibilidades de contar linhas de tabela com count em um banco de dados.
Como contar linhas no SQL: exemplos práticos
Como um exemplo, quantos produtos tem minha empresa mesmo?
select count(nome) from Produtos;
> 198
Mas...
select count(id) from Produtos;
> 200
Como assim? SQL pirou? De novo?
select id, nome from Produtos where nome is null;
> 190, null
> 196, null
O que é select count? Como usar para contar linhas no SQL
O select count verifica o número de linhas (conta as linhas) não nulas dentro do count que você quer fazer! Se tinha nome nulo, não contou! Resultado? Zoou.
SQL count: como contar valores não nulos
Muito cuidado com seus counts. Então o que devo contar? Se você quer contar valores não nulos, use o count(campo), como fizemos:
select count(nome) from Produtos;
> 198
SQL count: como contar todos os valores
Mas se quer contar todos, count estrela nele pra não correr risco, ele vai contar o número de registros retornados, independentemente de valores nulos:
select count(\*) from Produtos;
> 200
Caso especial: count (1)
E o 1? Pra que o count(1)?
select count(1) from Produtos;
> 200
O count(1) seria uma alternativa ao count(algum_campo) pois você teria certeza que nunca seria nulo, e que não precisaria ler o campo... acontece que fica bizarro select count(1), e você quer ter código bizarro ou código legível?
Desafio: count(), count (*) e count (1)
Como disse, eu prefiro contar estrelas... e você, conta estrelas, conta um ou conta id?
Fica agora o desafio: qual o resultado da SQL a seguir?
select count(nome) from Produtos where nome is null;
> ??????
Gostou dessas práticas e dicas de SQL? Então confira também os cursos que temos na Alura para a SQL e banco de dados! Outro assunto legal para estudar é sobre o que são como usar trigger em SQL. Até o próximo artigo ;)