Maison > base de données > tutoriel mysql > Pourquoi MySQL autorise-t-il les colonnes non groupées dans les requêtes GROUP BY ?

Pourquoi MySQL autorise-t-il les colonnes non groupées dans les requêtes GROUP BY ?

DDD
Libérer: 2024-12-10 19:29:12
original
708 Les gens l'ont consulté

Why Does MySQL Allow Non-Grouped Columns in GROUP BY Queries?

Extension GROUP BY non standard de MySQL : autoriser la sélection de colonnes non groupées

La syntaxe SQL standard interdit la sélection de champs non agrégés qui sont pas explicitement regroupés dans la clause GROUP BY d'une requête agrégée. Cependant, MySQL s'écarte de cette norme en autorisant de telles sélections.

SQL standard par rapport à l'extension de MySQL

Jusqu'en 1992, la spécification SQL standard interdisait ce comportement, garantissant que l'agrégat les requêtes renvoyaient uniquement des valeurs agrégées ou des colonnes regroupées dans la clause GROUP BY.

Cependant, avec la sortie de SQL-2003, la norme a été modifiée pour permettre la sélection de colonnes fonctionnellement dépendantes des colonnes de regroupement. L'extension de MySQL va cependant au-delà de cette norme en permettant de sélectionner toutes les colonnes, quelles que soient leurs dépendances fonctionnelles.

Implications de l'extension de MySQL

Cette extension a plusieurs implications :

  • Amélioration des performances : Éviter le tri et le regroupement inutiles des colonnes peut améliore considérablement les performances des requêtes.
  • Maintenabilité : Autoriser la sélection de colonnes non groupées simplifie l'écriture et la maintenance de requêtes complexes.
  • Résultats indéterminés : Cependant , cette extension introduit un potentiel de résultats indéterminés si les colonnes non groupées contiennent des valeurs différentes dans chaque groupe.

Motivation de MySQL pour l'extension

MySQL a implémenté cette extension pour se conformer aux normes SQL-2003, tout en répondant aux problèmes de performances et de maintenabilité mentionnés ci-dessus . Cependant, ils ont choisi une approche simplifiée en permettant la sélection de toutes les colonnes, plutôt que de mettre en œuvre un mécanisme plus complexe pour identifier les colonnes fonctionnellement dépendantes.

Désactivation de l'extension

Si Si vous le souhaitez, les utilisateurs peuvent désactiver l'extension en définissant sql_mode sur ONLY_FULL_GROUP_BY. Cela restaurera le comportement SQL-92 plus strict, garantissant que les colonnes non groupées ne peuvent pas être sélectionnées dans les requêtes agrégées.

Développements récents

En 2011, PostgreSQL a ajouté un plus implémentation restrictive de cette fonctionnalité, plus proche du standard SQL. La gestion de GROUP BY par MySQL a été encore améliorée dans la version 5.7 (2015), incorporant un mécanisme pour reconnaître les dépendances fonctionnelles, l'alignant plus étroitement sur la norme.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal