Heim >Datenbank >MySQL-Tutorial >Verstößt das nicht standardmäßige GROUP BY-Verhalten von MySQL gegen SQL-Standards?

Verstößt das nicht standardmäßige GROUP BY-Verhalten von MySQL gegen SQL-Standards?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-06 21:36:18141Durchsuche

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

Bricht MySQL den Standard mit nicht standardmäßigem GROUP BY-Verhalten?

Einführung

MySQLs Erweiterung für GROUP BY Die Klausel, die die Auswahl von Spalten ermöglicht, die nicht in der Gruppierung enthalten sind, hat Fragen hinsichtlich der Einhaltung von SQL-Standards aufgeworfen. In diesem Artikel werden der historische Kontext und die Auswirkungen dieser Abweichung untersucht.

Der Standard

Vor SQL-2003 war es üblich, die Auswahl nicht aggregierter Daten zu verbieten Spalten, die nicht Teil der GROUP BY-Klausel waren. Diese Einschränkung stellte konsistente Ergebnisse sicher, indem mehrdeutige Gruppierungen beseitigt wurden.

MySQL-Erweiterung

MySQL hat eine Erweiterung eingeführt, die es ermöglicht, nicht aggregierte Spalten auszuwählen, auch wenn sie nicht Teil davon sind die GRUPPE NACH. Laut MySQL-Dokumentation geschieht dies zur Leistungsoptimierung, indem unnötiges Sortieren und Gruppieren vermieden wird. Es gibt jedoch eine Einschränkung: Die nicht aggregierten Werte können unbestimmt sein, was bedeutet, dass der Server einen beliebigen Wert aus jeder Gruppe auswählen kann.

Standard-SQL-Interpretation

Die Der SQL-2003-Standard erlaubt nicht aggregierte Spaltenverweise in der Auswahlliste, wenn sie funktional von den Gruppierungsspalten abhängig sind oder in einem aggregierten Argument enthalten sind. Durch die funktionale Abhängigkeit wird sichergestellt, dass es für jeden Wert der Gruppierungsspalten einen einzelnen eindeutigen Wert für die nicht aggregierten Spalten gibt.

MySQL-Implementierung

Die MySQL-Erweiterung weicht von der ab Standard, indem alle Spalten ausgewählt werden können, auch diejenigen, die funktional nicht von den Gruppierungsspalten abhängig sind. Dies kann zu unerwarteten Ergebnissen führen, wenn die nicht aggregierten Werte innerhalb von Gruppen variieren.

Konsequenzen der MySQL-Erweiterung

Die Implementierung von MySQL hat zwei Hauptauswirkungen:

  • Leistungsoptimierung: Die Erweiterung kann die Leistung in bestimmten GROUP BY-Abfragen verbessern, indem unnötige Abfragen vermieden werden Sortieren und Gruppieren.
  • Unbestimmte Ergebnisse: Der Nachteil dieser Erweiterung besteht darin, dass nicht aggregierte Spalten möglicherweise unbestimmte Werte zurückgeben, was zu inkonsistenten Ergebnissen führt.

Behebung der MySQL-Abweichung

MySQL-Benutzer können das nicht standardmäßige Verhalten deaktivieren indem Sie den sql_mode auf ONLY_FULL_GROUP_BY setzen. Darüber hinaus wurden in MySQL 5.7 Verbesserungen eingeführt, um dem Standard besser zu entsprechen. PostgreSQL 9.1 bietet außerdem eine restriktivere Implementierung, die sich eng an die funktionalen Abhängigkeitsanforderungen hält.

Das obige ist der detaillierte Inhalt vonVerstößt das nicht standardmäßige GROUP BY-Verhalten von MySQL gegen SQL-Standards?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn