Nicht standardmäßiges GROUP BY
Verhalten von MySQL
Ein wesentlicher Unterschied zwischen MySQL und anderen SQL-Datenbanken (wie Oracle und SQL Server) liegt in der Art und Weise, wie sie mit GROUP BY
-Klauseln umgehen. MySQL erlaubt GROUP BY
-Abfragen, ohne dass Aggregatfunktionen erforderlich sind, eine Funktion, die vom Standard-ANSI-SQL abweicht. Diese Designentscheidung bietet zwar potenzielle Leistungsvorteile und Benutzerfreundlichkeit, hat jedoch Kritik hinsichtlich der SQL-Standardkonformität hervorgerufen.
MySQLs Begründung:
Die Entwickler von MySQL argumentieren, dass diese Flexibilität sowohl die Abfrageleistung als auch die Benutzerfreundlichkeit verbessert. Durch die Möglichkeit der Auswahl nicht aggregierter Spalten innerhalb einer GROUP BY
-Klausel vermeiden Benutzer die Notwendigkeit zusätzlicher, möglicherweise unnötiger Aggregatfunktionen. Dies vereinfacht Abfragen und kann zu Effizienzgewinnen führen.
Zum Beispiel die folgende Abfrage:
<code class="language-sql">SELECT X, Y FROM someTable GROUP BY X;</code>
In MySQL gibt dies eine Liste eindeutiger X
-Werte zurück, die jeweils mit einem willkürlichen entsprechenden Y
-Wert aus der Gruppe gepaart sind. Dies ist nützlich, wenn nur unterschiedliche X
-Werte benötigt werden, unabhängig von den spezifischen Y
-Daten, die jedem zugeordnet sind.
Das Verhalten von MySQL steuern:
Während MySQL diese entspannte Interpretation bietet, können Benutzer eine strikte ANSI-SQL-Konformität erzwingen, indem sie den only_full_group_by
SQL-Modus festlegen. Wenn dieser Modus aktiviert ist, GROUP BY
Abfragen ohne Aggregatfunktionen erzeugen einen Fehler.
Zusammenfassung:
Die flexible GROUP BY
Funktionalität von MySQL spiegelt eine Designphilosophie wider, bei der Leistung und Benutzerfreundlichkeit im Vordergrund stehen. Dies weicht jedoch von den ANSI-SQL-Standards ab. Mit der Einstellung only_full_group_by
können Entwickler zwischen diesem Komfort und der strikten Einhaltung von Standards wählen.
Das obige ist der detaillierte Inhalt vonWie unterscheidet sich MySQLs flexibles „GROUP BY' von Standard-SQL und warum?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!