Maison > base de données > tutoriel mysql > L'extension « GROUP BY » de MySQL est-elle conforme aux normes SQL ou s'agit-il d'une déviation ?

L'extension « GROUP BY » de MySQL est-elle conforme aux normes SQL ou s'agit-il d'une déviation ?

Susan Sarandon
Libérer: 2024-12-07 03:56:10
original
245 Les gens l'ont consulté

Does MySQL's `GROUP BY` Extension Conform to SQL Standards, or Is It a Deviation?

Extension de MySQL à GROUP BY : adhésion ou écart par rapport à la norme SQL ?

Introduction

Traditionnellement dans SQL Server et autres SGBDR, sélection de colonnes non agrégées qui ne font pas partie de la clause GROUP BY dans une requête agrégée est interdite par le standard SQL. Cependant, dans MySQL, ce comportement s'écarte de la norme, soulevant des questions sur l'adhésion de MySQL.

Groupe étendu BY de MySQL

Dans les versions SQL jusqu'en 1992, la norme en effet interdit la sélection de champs non agrégés non inclus dans la clause GROUP BY. Cependant, à partir de SQL-2003, la norme permet de sélectionner des colonnes qui dépendent fonctionnellement des colonnes de regroupement.

MySQL, dans son empressement à implémenter cette nouvelle norme, a étendu GROUP BY pour permettre la sélection de toutes les colonnes. , pas seulement ceux qui dépendent fonctionnellement des colonnes de regroupement. Bien que cette extension soit conforme aux dernières normes SQL, son implémentation s'écarte du comportement prévu.

Conséquences de l'extension MySQL

Autoriser toutes les colonnes de la liste SELECT, même celles non fonctionnellement dépendants, peut conduire à des résultats indéterminés si les colonnes non groupées contiennent des valeurs différentes au sein d'un groupe. Cet écart par rapport à la norme peut provoquer de la confusion et un comportement imprévisible pour les utilisateurs.

Pour résoudre ce problème, MySQL a introduit le ONLY_FULL_GROUP_BY sql_mode, qui désactive le comportement GROUP BY étendu de MySQL et revient au SQL plus restrictif. -92.

Justification de MySQL et comparaison avec d'autres SGBDR

La justification de MySQL pour cette extension est l'optimisation des performances. En autorisant toutes les colonnes de la liste SELECT, MySQL peut éviter les tris et regroupements inutiles, ce qui entraîne des améliorations de performances.

Cependant, d'autres SGBDR tels que PostgreSQL et les versions ultérieures de MySQL (5.7) ont implémenté des approches plus conformes aux normes. en reconnaissant les dépendances fonctionnelles et en limitant en conséquence les colonnes non agrégées dans la liste SELECT. Cela garantit à la fois les performances et le respect de la norme SQL.

Conclusion

Le GROUP BY étendu de MySQL, bien qu'inspiré de la norme SQL, s'écarte de sa mise en œuvre prévue. Cette extension peut conduire à des résultats indéterminés et nécessite une compréhension plus nuancée de la dépendance fonctionnelle. En définissant le ONLY_FULL_GROUP_BY sql_mode, les utilisateurs peuvent revenir au comportement SQL-92 plus restrictif. Les versions ultérieures de MySQL (5.7) ont amélioré leur gestion de GROUP BY pour mieux s'aligner 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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal