Heim >Datenbank >MySQL-Tutorial >Warum erlaubt MySQL nicht gruppierte Spalten in GROUP BY-Abfragen?
Die nicht standardmäßige GROUP BY-Erweiterung von MySQL: Ermöglicht die Auswahl nicht gruppierter Spalten
Die Standard-SQL-Syntax verbietet die Auswahl nicht-aggregierter Felder nicht explizit in der GROUP BY-Klausel einer Aggregatabfrage gruppiert. Allerdings weicht MySQL von diesem Standard ab, indem es solche Auswahlmöglichkeiten zulässt.
Standard-SQL vs. MySQL-Erweiterung
Bis 1992 verbot die Standard-SQL-Spezifikation dieses Verhalten und stellte so sicher, dass aggregiert wird Abfragen gaben nur aggregierte Werte oder in der GROUP BY-Klausel gruppierte Spalten zurück.
Mit der Veröffentlichung von SQL-2003 wurde jedoch der Standard wurde geändert, um die Auswahl von Spalten zu ermöglichen, die funktional von den Gruppierungsspalten abhängig sind. Die MySQL-Erweiterung geht jedoch über diesen Standard hinaus, indem sie die Auswahl aller Spalten unabhängig von ihren funktionalen Abhängigkeiten ermöglicht.
Auswirkungen der MySQL-Erweiterung
Diese Erweiterung hat mehrere Auswirkungen :
MySQLs Motivation für die Erweiterung
MySQL hat diese Erweiterung implementiert, um den SQL-2003-Standards zu entsprechen und gleichzeitig die oben genannten Leistungs- und Wartbarkeitsprobleme zu berücksichtigen . Sie wählten jedoch einen vereinfachten Ansatz, indem sie die Auswahl aller Spalten ermöglichten, anstatt einen komplexeren Mechanismus zur Identifizierung funktional abhängiger Spalten zu implementieren.
Deaktivieren der Erweiterung
Wenn Bei Bedarf können Benutzer die Erweiterung deaktivieren, indem sie sql_mode auf ONLY_FULL_GROUP_BY setzen. Dadurch wird das strengere SQL-92-Verhalten wiederhergestellt und sichergestellt, dass nicht gruppierte Spalten nicht in Aggregatabfragen ausgewählt werden können.
Neueste Entwicklungen
Im Jahr 2011 fügte PostgreSQL eine weitere hinzu restriktive Implementierung dieser Funktion, näher am SQL-Standard. Die Handhabung von GROUP BY durch MySQL wurde in Version 5.7 (2015) weiter verbessert, indem ein Mechanismus zur Erkennung funktionaler Abhängigkeiten integriert und so näher an den Standard angepasst wurde.
Das obige ist der detaillierte Inhalt vonWarum erlaubt MySQL nicht gruppierte Spalten in GROUP BY-Abfragen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!