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.
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
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.
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.
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