web-dev-qa-db-fra.com

Quelle est la différence entre count (0), count (1) .. et count (*) dans MySQL/SQL?

On m'a récemment posé cette question dans une interview ... Je l'ai essayée dans MySQL et j'ai obtenu les mêmes résultats (résultats finaux) ... Tous ont donné le nombre de lignes dans ce tableau particulier. différence majeure entre eux.

34
Dhruv

Rien de vraiment, sauf si vous spécifiez un champ dans une table ou une expression entre parenthèses au lieu de valeurs constantes ou *

Laissez-moi vous donner une réponse détaillée. Count vous donnera le numéro d’enregistrement non nul du champ donné. Disons que vous avez une table nommée A

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

renverra tous le même nombre d'enregistrements, c'est-à-dire le nombre de lignes de la table A. Néanmoins, le résultat est différent. S'il y a 3 enregistrements dans la table. Avec X et Y comme noms de champs

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)

Ainsi, les trois requêtes renvoient le même nombre. Sauf si vous utilisez 

select count(Y) from A 

puisqu'il n'y a qu'une seule valeur non nulle, vous obtiendrez 1 en sortie

44
Bren

COUNT(*) comptera le nombre de lignes, alors que COUNT(expression) comptera des valeurs non nulles dans expression et COUNT(column) comptera toutes les valeurs non nulles de la colonne.

Puisque 0 et 1 sont des valeurs non nulles, COUNT(0)=COUNT(1) et qu'elles équivaudront au nombre de lignes COUNT(*). C'est un concept différent, mais le résultat sera le même.

29
fthiella

Maintenant, ils devraient tous fonctionner de manière identique.

COUNT (1) (ou la constante que vous avez choisie) était parfois recommandé par rapport à COUNT (*), car un code d'optimisation de requête lierait la base de données à récupérer toutes les données de champ avant d'exécuter le décompte. COUNT (1) était donc plus rapide, mais cela ne devrait plus avoir d'importance maintenant.

15
eftpotrm

Disons que nous avons un tableau avec des colonnes

Table 
-------
col_A  col_B

Le système renvoie toutes les valeurs de colonne (null et non-null) lorsque nous interrogeons 

select col_A from Table

Le système renvoie des valeurs de colonne non nulles lorsque nous interrogons

select count(col_A) from Table

Le système renvoie le nombre total de lignes lorsque nous interrogeons

select count(*) from Table
0
Vijay Vj