Ich bin nur verwirrt mit der Ausführungssequenz einer SQL-Abfrage, wenn wir GROUP BY und HAVING mit einer WHERE-Klausel verwenden. Welches wird zuerst ausgeführt? Wie ist die Reihenfolge?
Ich bin nur verwirrt mit der Ausführungssequenz einer SQL-Abfrage, wenn wir GROUP BY und HAVING mit einer WHERE-Klausel verwenden. Welches wird zuerst ausgeführt? Wie ist die Reihenfolge?
Antworten:
in Ordnung:
FROM & JOIN s bestimmen und filtern Zeilen
WO mehr Filter in den Zeilen
GROUP BY diese Zeilen zu Gruppen zusammenfasst
HAVING Filter Gruppen
ORDER BY ordnet die verbleibenden Zeilen / Gruppen
LIMIT auf den verbleibenden Zeilen / Gruppen Filter
SET SHOWPLAN_ALL ON
Hier ist die vollständige Sequenz für SQL Server:
1. FROM
2. ON
3. JOIN
4. WHERE
5. GROUP BY
6. WITH CUBE or WITH ROLLUP
7. HAVING
8. SELECT
9. DISTINCT
10. ORDER BY
11. TOP
Aus der obigen Liste können Sie leicht die Ausführungsreihenfolge ersehen, GROUP BY, HAVING and WHERE
deren:
1. WHERE
2. GROUP BY
3. HAVING
SELECT * FROM table1 INNER JOIN table2 ON col = col2 WHERE table1.col = @val
Hier kommt ON nach dem Beitritt und select kommt zuerst, irgendwelche Erklärungen?
FROM
zuerst aus, dann ON
und so weiter.
WO ist zuerst, dann gruppieren Sie das Ergebnis der Abfrage, und nicht zuletzt wird die HAVING-Klausel verwendet, um das gruppierte Ergebnis zu filtern. Dies ist die "logische" Reihenfolge, ich weiß nicht, wie dies technisch in der Engine implementiert ist.
Ich denke, es ist in der Engine implementiert, wie Matthias sagte: WO, GRUPPE NACH, HABEN
Ich habe versucht, online eine Referenz zu finden, die die gesamte Sequenz auflistet (dh "SELECT" wird ganz unten angezeigt), aber ich kann sie nicht finden. Es wurde in einem Buch "Inside Microsoft SQL Server 2005" beschrieben, das ich vor nicht allzu langer Zeit von Solid Quality Learning gelesen habe
Bearbeiten: Link gefunden: http://blogs.x2line.com/al/archive/2007/06/30/3187.aspx
Überlegen Sie, was Sie tun müssen, wenn Sie Folgendes implementieren möchten:
Die Reihenfolge ist WO, GRUPPE NACH UND HABEN.
In der unten angegebenen Reihenfolge
Die Klausel kann vor / vor der Gruppe durch Klausel stehen.
Beispiel: Wählen Sie * FROM test_std; ROLL_NO SNAME DOB TEACH
1 John 27-AUG-18 Wills
2 Knit 27-AUG-18 Prestion
3 Perl 27-AUG-18 Wills
4 Ohrm 27-AUG-18 Woods
5 Smith 27-AUG-18 Charmy
6 Jony 27-AUG-18 Wills
Warner 20-NOV-18 Wills
Marsh 12-NOV-18 Langer
FINCH 18-OCT-18 Langer
9 Zeilen ausgewählt.
Wählen Sie Teach, Count ( ) Count aus test_std mit count ( )> 1 Gruppe nach TEACH.
LEHRZÄHLER
Langer 2 Testamente 4
Dies ist die SQL-Ausführungsreihenfolge einer Abfrage.
Sie können die Ausführungsreihenfolge anhand von Beispielen aus diesem Artikel überprüfen .
Für Ihre Frage könnten die folgenden Zeilen hilfreich sein und direkt aus diesem Artikel stammen .
- GROUP BY -> Die verbleibenden Zeilen nach dem Anwenden der WHERE-Einschränkungen werden dann basierend auf gemeinsamen Werten in der in der GROUP BY-Klausel angegebenen Spalte gruppiert. Aufgrund der Gruppierung gibt es nur so viele Zeilen, wie eindeutige Werte in dieser Spalte enthalten sind. Dies bedeutet implizit, dass Sie dies nur verwenden müssen, wenn Ihre Abfrage Aggregatfunktionen enthält.
- HAVING -> Wenn die Abfrage eine GROUP BY-Klausel enthält, werden die Einschränkungen in der HAVING-Klausel auf die gruppierten Zeilen angewendet. Verwerfen Sie die gruppierten Zeilen, die die Einschränkung nicht erfüllen. Wie die WHERE-Klausel ist auch in den meisten Datenbanken über diesen Schritt nicht auf Aliase zugegriffen werden.
Verweise:-
SELECT
FROM
Joins
WHERE
GROUP Durch
MIT
ORDER BY