L'approche unique de MySQL pour les requêtes GROUP BY sans agrégats
Contrairement aux systèmes de bases de données comme Oracle et SQL Server, MySQL autorise les clauses GROUP BY
sans fonctions d'agrégation associées. Cela contraste fortement avec le comportement SQL standard, où de telles requêtes entraînent généralement des erreurs. La question clé est : comment MySQL gère-t-il les colonnes non agrégées dans le jeu de résultats ?
MySQL sélectionne une valeur arbitraire dans les colonnes non agrégées pour chaque groupe. Cette valeur est souvent, mais pas toujours, la première valeur rencontrée au sein de ce groupe. La justification de ce comportement découle de l'hypothèse selon laquelle si une colonne n'est pas agrégée ou ne fait pas partie du regroupement, son inclusion dans la liste SELECT
est potentiellement arbitraire. Par conséquent, MySQL renvoie simplement une valeur représentative.
Conformité ANSI et only_full_group_by
Paramètre
Cette approche détendue de GROUP BY
s'écarte des normes ANSI SQL. MySQL résout ce problème en fournissant le mode only_full_group_by
SQL. L'activation de ce mode applique une conformité stricte à ANSI SQL, exigeant que toutes les colonnes non agrégées soient incluses dans la clause GROUP BY
. Cela garantit des résultats de requête prévisibles et conformes aux normes.
Pourquoi MySQL choisit cette approche
La décision d'autoriser les requêtes GROUP BY
non agrégées dans MySQL donne la priorité aux performances et à la facilité d'utilisation. Comme indiqué dans le manuel MySQL 5.0, cette conception simplifie le traitement des requêtes, réduisant la surcharge de calcul et offrant une expérience utilisateur plus simple. Il permet une récupération efficace des données sans les complexités des opérations d'agrégation explicites.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!