Heim >Datenbank >MySQL-Tutorial >Können Sie HAVING ohne GROUP BY in SQL verwenden?

Können Sie HAVING ohne GROUP BY in SQL verwenden?

Linda Hamilton
Linda HamiltonOriginal
2024-12-30 21:15:11857Durchsuche

Can You Use HAVING Without GROUP BY in SQL?

HAVING ohne GROUP BY: Eine SQL-Anomalie

Ist es in Standard-SQL möglich, eine HAVING-Klausel ohne eine GROUP BY-Klausel zu verwenden?

Frage 1: Standard-SQL-Konformität

Das bereitgestellte Beispiel query:

SELECT *
FROM Book
HAVING NumberOfPages = MAX(NumberOfPages)

widerspricht dem SQL-Standard. Gemäß dem Standard müssen alle Spaltenverweise in der HAVING-Klausel auf Spalten verweisen, die funktional von der in der GROUP BY-Klausel angegebenen Spaltenmenge abhängig sind. Der betreffenden Abfrage fehlt jedoch eine GROUP BY-Klausel, sodass sie nicht dem Standard entspricht.

Frage 2: MySQL-Kompatibilität

Die Abfrage funktioniert in MySQL nur unter bestimmten Bedingungen , wobei die erste Zeile des Ergebnisses den Maximalwert für NumberOfPages enthält. Dieses Verhalten ist wahrscheinlich darauf zurückzuführen, dass MySQL HAVING-Klauseln ohne GROUP BY-Klauseln verarbeitet.

Frage 3: Standard-SQL-Begründung

Der Standard verbietet HAVING-Klauseln ohne GROUP BY-Klauseln, da sie zu Mehrdeutigkeiten bei der Angabe führen, welche Zeilen die HAVING-Bedingung erfüllen. Für einen Tabellenausdruck als Ganzes betrachtet gibt es keine logische Grundlage für die Auswahl einer bestimmten Zeile zum Vergleich mit Aggregatfunktionen.

Beispiel einer gültigen Standard-SQL-Abfrage:

Diese Abfrage demonstriert eine gültige Verwendung einer HAVING-Klausel ohne eine GROUP BY-Klausel:

SELECT 'T' AS result
FROM Book
HAVING MIN(NumberOfPages) < MAX(NumberOfPages);

Die Abfrage gibt immer entweder eine einzelne Zeile mit dem Wert zurück 'T' (zeigt Bücher mit unterschiedlicher Seitenanzahl an) oder eine leere Menge (keine Zeilen).

Schlussfolgerung:

Während die Beispielabfrage in MySQL funktioniert, ist sie entspricht nicht dem Standard-SQL. Standard-SQL verhindert die Verwendung von HAVING-Klauseln ohne GROUP BY-Klauseln, um Mehrdeutigkeiten zu vermeiden und logische Konsistenz sicherzustellen.

Das obige ist der detaillierte Inhalt vonKönnen Sie HAVING ohne GROUP BY in SQL verwenden?. 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