Heim >Datenbank >MySQL-Tutorial >Kann HAVING in SQL ohne eine GROUP BY-Klausel verwendet werden?
Kann eine HAVING-Klausel ohne eine GROUP BY-Klausel verwendet werden?
Der SQL-Standard legt spezifische Kriterien für die Verwendung der HAVING-Klausel fest, darunter: Verweisen auf Spalten, die funktional von der GROUP BY-Klausel oder äußeren Verweisen abhängig sind. Die bereitgestellte Abfrage wirft jedoch die Frage auf, ob es möglich ist, HAVING ohne GROUP BY zu verwenden.
Standard-SQL-Spezifikationen
Nach dem Standard eine HAVING-Klausel ohne Eine GROUP BY-Klausel ist nicht ausdrücklich verboten. Die Abfrage weist jedoch ein fragwürdiges Verhalten auf:
SELECT * FROM Book HAVING NumberOfPages = MAX(NumberOfPages)
Diese Abfrage verwendet eine Aggregatfunktion (MAX) in der HAVING-Klausel, gibt jedoch nicht an, welche bestimmte Zeile ausgewählt werden soll. Daher ist sein Verhalten nicht streng durch den Standard definiert.
MySQL-Implementierung
MySQL interpretiert diese Abfrage so, als ob es eine implizite GROUP BY-Klausel gäbe, und wählt nur die Zeile aus mit dem maximalen NumberOfPages-Wert. Dieses Verhalten entspricht nicht dem Standard.
Grund für die Nichteinhaltung des Standards
Der Standard verlangt, dass die HAVING-Klausel auf Gruppen von Zeilen angewendet wird, die durch die GROUP BY-Klausel definiert werden. Sein Zweck besteht darin, Gruppen basierend auf aggregierten Werten herauszufiltern. Die Verwendung von HAVING ohne GROUP BY würde das Filtern nach beliebigen Bedingungen ermöglichen und möglicherweise zu unerwarteten Ergebnissen führen.
Gültige Standard-SQL-Abfrage
Eine gültige Standard-SQL-Abfrage, die HAVING ohne GROUP BY verwendet wäre:
SELECT 'T' AS result FROM Book HAVING MIN(NumberOfPages) < MAX(NumberOfPages);
Diese Abfrage prüft, ob der minimale NumberOfPages-Wert kleiner als der maximale Wert ist, und gibt eine einzelne Zeile mit zurück das Ergebnis 'T', wenn wahr, und eine leere Menge, wenn falsch. Dieses Verhalten steht im Einklang mit der Anforderung des Standards, dass HAVING für Aggregatfunktionen gilt, die auf der gesamten Tabelle ausgeführt werden.
Das obige ist der detaillierte Inhalt vonKann HAVING in SQL ohne eine GROUP BY-Klausel verwendet werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!