Maison >base de données >tutoriel mysql >Le comportement GROUP BY non standard de MySQL viole-t-il les normes SQL ?

Le comportement GROUP BY non standard de MySQL viole-t-il les normes SQL ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-06 21:36:18141parcourir

Does MySQL's Non-Standard GROUP BY Behavior Violate SQL Standards?

MySQL brise-t-il la norme avec un comportement GROUP BY non standard ?

Introduction

L'extension MySQL au GROUP BY La clause, permettant la sélection de colonnes non incluses dans le regroupement, a soulevé des questions quant au respect des normes SQL. Cet article explore le contexte historique et les implications de cet écart.

La norme

Avant SQL-2003, il était courant d'interdire la sélection de données non agrégées. colonnes qui ne faisaient pas partie de la clause GROUP BY. Cette restriction garantissait des résultats cohérents en éliminant les regroupements ambigus.

Extension de MySQL

MySQL a introduit une extension qui permet de sélectionner des colonnes non agrégées même lorsqu'elles ne font pas partie de le GROUPE PAR. Selon la documentation MySQL, cela vise à optimiser les performances en évitant les tris et regroupements inutiles. Cependant, il comporte une mise en garde : les valeurs non agrégées peuvent être indéterminées, ce qui signifie que le serveur peut choisir n'importe quelle valeur dans chaque groupe.

Interprétation SQL standard

Le La norme SQL-2003 autorise les références de colonnes non agrégées dans la liste de sélection si elles dépendent fonctionnellement des colonnes de regroupement ou si elles sont contenues dans un argument agrégé. La dépendance fonctionnelle garantit que pour chaque valeur des colonnes de regroupement, il existe une seule valeur unique pour les colonnes non agrégées.

Implémentation de MySQL

L'extension de MySQL s'écarte de la standard en permettant de sélectionner toutes les colonnes, même celles qui ne dépendent pas fonctionnellement des colonnes de regroupement. Cela peut conduire à des résultats inattendus lorsque les valeurs non agrégées varient au sein des groupes.

Conséquences de l'extension de MySQL

La mise en œuvre de MySQL a deux implications principales :

  • Optimisation des performances : L'extension peut améliorer les performances de certaines requêtes GROUP BY en éviter les tris et regroupements inutiles.
  • Résultats indéterminés : L'inconvénient de cette extension est que les colonnes non agrégées peuvent renvoyer des valeurs indéterminées, conduisant à des résultats incohérents.

Résoudre la déviation de MySQL

Les utilisateurs de MySQL peuvent désactiver le comportement non standard en définissant sql_mode sur ONLY_FULL_GROUP_BY. De plus, des améliorations ont été introduites dans MySQL 5.7 pour mieux se conformer au standard. PostgreSQL 9.1 propose également une implémentation plus restrictive qui respecte étroitement les exigences de dépendance fonctionnelle.

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!

Déclaration:
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