MySQLs Erweiterung zu GROUP BY: Einhaltung oder Abweichung vom SQL-Standard?
Einführung
Traditionell werden in SQL Server und anderen RDBMS nicht aggregierte Spalten ausgewählt, die nicht Teil der GROUP BY-Klausel in einem Aggregat sind Abfrage ist durch den SQL-Standard verboten. In MySQL weicht dieses Verhalten jedoch vom Standard ab, was Fragen zur Einhaltung von MySQL aufwirft.
MySQL's Extended GROUP BY
In SQL-Versionen bis 1992 tatsächlich der Standard verbietet die Auswahl von nicht aggregierten Feldern, die nicht in der GROUP BY-Klausel enthalten sind. Ab SQL-2003 erlaubt der Standard jedoch die Auswahl von Spalten, die funktional von den Gruppierungsspalten abhängig sind.
MySQL hat in seinem Bestreben, diesen neuen Standard zu implementieren, GROUP BY erweitert, um die Auswahl aller Spalten zu ermöglichen , nicht nur diejenigen, die funktional von den Gruppierungsspalten abhängig sind. Obwohl diese Erweiterung den neuesten SQL-Standards entspricht, weicht ihre Implementierung vom beabsichtigten Verhalten ab.
Konsequenzen der MySQL-Erweiterung
Zulassen aller Spalten in der SELECT-Liste, auch dieser nicht funktional abhängig, kann zu unbestimmten Ergebnissen führen, wenn Nicht-Gruppierungsspalten unterschiedliche Werte innerhalb einer Gruppe enthalten. Diese Abweichung vom Standard kann zu Verwirrung und unvorhersehbarem Verhalten bei Benutzern führen.
Um dieses Problem zu beheben, hat MySQL den ONLY_FULL_GROUP_BY sql_mode eingeführt, der das erweiterte GROUP BY-Verhalten von MySQL deaktiviert und auf das restriktivere SQL zurückgreift -92-Standard.
Grundlage und Vergleich von MySQL mit anderen RDBMSs
MySQLs Grund für diese Erweiterung ist die Leistungsoptimierung. Durch das Zulassen aller Spalten in der SELECT-Liste kann MySQL unnötiges Sortieren und Gruppieren vermeiden, was zu Leistungsverbesserungen führt.
Andere RDBMS wie PostgreSQL und spätere Versionen von MySQL (5.7) haben jedoch standardkonformere Ansätze implementiert indem funktionale Abhängigkeiten erkannt und nicht aggregierte Spalten in der SELECT-Liste entsprechend eingeschränkt werden. Dies stellt sowohl die Leistung als auch die Einhaltung des SQL-Standards sicher.
Fazit
MySQLs erweitertes GROUP BY ist zwar vom SQL-Standard inspiriert, weicht jedoch von der beabsichtigten Implementierung ab. Diese Erweiterung kann zu unbestimmten Ergebnissen führen und erfordert ein differenzierteres Verständnis der funktionalen Abhängigkeit. Durch Festlegen des ONLY_FULL_GROUP_BY sql_mode können Benutzer zum restriktiveren SQL-92-Verhalten zurückkehren. Spätere Versionen von MySQL (5.7) haben ihre Handhabung von GROUP BY verbessert, um sie besser an den Standard anzupassen.
Das obige ist der detaillierte Inhalt vonEntspricht die MySQL-Erweiterung „GROUP BY' den SQL-Standards oder handelt es sich um eine Abweichung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!