Lassen Sie uns in den Ausführungsablauf für beide Methoden eintauchen: die Inline View-Methode und die Corlated Subquery-Methode. Wenn Sie die schrittweise Ausführung dieser Abfragen verstehen, können Sie besser klären, wie SQL jedes Szenario verarbeitet, um das gewünschte Ergebnis zu erzielen.
Die Inline-Ansichtsmethode verwendet eine Unterabfrage in der FROM-Klausel, um eine temporäre Ergebnismenge (Inline-Ansicht) zu erstellen und diese dann in der äußeren Abfrage zu verarbeiten.
Abfrage:
SELECT DepartmentId, MAX(Salary) AS HighestSalary
VON (
SELECT DepartmentId, Gehalt
VON Mitarbeiter
) AS InlineView
GRUPPE NACH Abteilungs-ID;
Ausführungsschritte:
Die innere Abfrage (SELECT DepartmentId, Salary FROM Employee) wird zuerst ausgeführt.
Es wählt die Spalten „DepartmentId“ und „Salary“ aus der Tabelle „Employee“ aus.
Dieser Schritt erstellt im Wesentlichen einen temporären Ergebnissatz (Inline-Ansicht), der alle Zeilen aus der Tabelle „Employee“ enthält, jedoch nur die Spalten „DepartmentId“ und „Salary“.
Beispielergebnis der inneren Abfrage:
Nachdem die Inline-Ansicht (temporäre Ergebnismenge) erstellt wurde, nimmt die äußere Abfrage diese Ergebnismenge und führt eine Aggregation mithilfe der Funktion MAX(Gehalt) durch.
Die GROUP BY DepartmentId stellt sicher, dass das maximale Gehalt für jede Abteilung berechnet wird.
Die äußere Abfrage durchsucht die Zeilen aus der Inline-Ansicht und gruppiert die Zeilen basierend auf DepartmentId. Anschließend wird das maximale Gehalt für jede Gruppe berechnet.
Die Abfrage gibt das höchste Gehalt für jede Abteilung zurück.
Endergebnis:
Zusammenfassung des Ausführungsablaufs:
Führen Sie die innere Abfrage aus, um die Inline-Ansicht zu erstellen.
Die äußere Abfrage aggregiert (mit MAX) und gruppiert die Ergebnisse nach DepartmentId.
Das Endergebnis zurückgeben.
Bei der korrelierten Unterabfragemethode wird die innere Unterabfrage für jede Zeile in der äußeren Abfrage ausgeführt, wodurch sie dynamischer, aber möglicherweise langsamer als die Inline-Ansichtsmethode ist.
Abfrage:
SELECT DepartmentId, EmployeeId, Salary AS HighestSalary
VON Mitarbeiter e
WO Gehalt = (
WÄHLEN SIE MAX(Gehalt)
VON Mitarbeiter
WHERE DepartmentId = e.DepartmentId
);
Ausführungsschritte:
Die äußere Abfrage beginnt mit dem Lesen jeder Zeile aus der Employee-Tabelle.
Für jede Zeile in der Mitarbeitertabelle ruft die Abfrage die Abteilungs-ID, die Mitarbeiter-ID und das Gehalt ab.
Beispiel für die zeilenweise Verarbeitung aus der äußeren Abfrage:
Für jede Zeile aus der äußeren Abfrage wird die innere Abfrage (SELECT MAX(Salary) FROM Employee WHERE DepartmentId = e.DepartmentId) ausgeführt.
Die Unterabfrage berechnet das maximale Gehalt in der Abteilung, die der DepartmentId der aktuellen Zeile entspricht.
Die Korrelation zwischen der äußeren Abfrage und der Unterabfrage erfolgt über die DepartmentId-Bedingung (WHERE DepartmentId = e.DepartmentId).
Zum Beispiel:
Für die Zeile mit EmployeeId = 1 berechnet die Unterabfrage das maximale Gehalt für DepartmentId = 101, also 6000.
Für die Zeile mit EmployeeId = 3 berechnet die Unterabfrage das maximale Gehalt für DepartmentId = 102, also 7500.
Beispielausführung der Unterabfrage für jede Zeile:
Nach der Berechnung des Höchstgehalts für die entsprechende DepartmentId vergleicht die äußere Abfrage das Gehalt der aktuellen Zeile mit dem von der Unterabfrage zurückgegebenen Höchstgehalt.
Wenn das Gehalt mit dem Höchstgehalt für die Abteilung übereinstimmt, wird die Zeile beibehalten.
Zeilen, die nicht übereinstimmen, werden herausgefiltert.
Zum Beispiel:
Die Zeile für EmployeeId = 2 wird beibehalten, da ihr Gehalt von 6000 dem Höchstgehalt in Abteilung 101 entspricht.
Die Zeile für EmployeeId = 1 wird herausgefiltert, da ihr Gehalt von 5000 unter dem Höchstgehalt in Abteilung 101 liegt.
Die äußere Abfrage gibt die Zeilen zurück, in denen das Gehalt des Mitarbeiters mit dem Höchstgehalt seiner Abteilung übereinstimmt.
Endergebnis:
Zusammenfassung des Ausführungsablaufs:
Führen Sie für jede Zeile in der äußeren Abfrage die innere korrelierte Unterabfrage aus.
Die Unterabfrage berechnet das maximale Gehalt für die aktuelle DepartmentId.
Vergleichen Sie das Gehalt des Mitarbeiters mit dem Ergebnis der Unterabfrage.
Zeilen filtern und zurückgeben, in denen das Gehalt des Mitarbeiters dem Höchstgehalt seiner Abteilung entspricht.
Hauptunterschiede im Ausführungsablauf:
Leistungsaspekte:
Die Inline-View-Methode ist effizienter, wenn Sie nur am höchsten Gehalt für jede Abteilung interessiert sind, ohne detaillierte Mitarbeiterinformationen zu benötigen. Es führt die Aggregation in einem einzigen Durchgang über die Daten durch.
Die korrelierte Unterabfragemethode kann bei großen Datensätzen langsamer sein, da sie die Unterabfrage für jede Zeile in der äußeren Abfrage ausführt, was möglicherweise zu vielen redundanten Berechnungen führt. Es ermöglicht Ihnen jedoch, sowohl das höchste Gehalt der Abteilung als auch detaillierte Mitarbeiterinformationen (z. B. Mitarbeiter-ID, Name) abzurufen.
Das obige ist der detaillierte Inhalt vonInline-View-Methode und die korrelierte Unterabfrage in SQL. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!