Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Unterschied zwischen Unterabfrage und korrelierter Unterabfrage

Das obige Beispiel ist keine Co-related Sub-Query. Es ist eine abgeleitete Tabelle / Inline-Ansicht, da es sich um eine Unterabfrage innerhalb der FROM-Klausel handelt.

Eine verknüpfte Unterabfrage sollte darin auf ihre übergeordnete Tabelle (Hauptabfrage) verweisen. Siehe zum Beispiel:N. max. Gehalt nach Co-bezogener Unterabfrage finden:

SELECT Salary 
FROM Employee E1
WHERE N-1 = (SELECT COUNT(*)
             FROM Employee E2
             WHERE E1.salary <E2.Salary) 

Zusammengehörige vs. verschachtelte Unterabfragen.

Technische Unterschiede zwischen normaler Unterabfrage und Co-bezogener Unterabfrage sind:

1. Schleife: Co-related sub-query loop unter main-query; während verschachtelt nicht; daher wird die zugehörige Unterabfrage bei jeder Iteration der Hauptabfrage ausgeführt. Während im Falle einer verschachtelten Abfrage; Die Unterabfrage wird zuerst ausgeführt, dann die äußere Abfrage als Nächstes. Daher die maximale Nr. der Ausführungen sind NXM für korrelierte Unterabfragen und N+M für Unterabfragen.

2. Abhängigkeit (von innen nach außen vs. von außen nach innen): Im Fall einer verwandten Unterabfrage hängt die innere Abfrage zur Verarbeitung von der äußeren Abfrage ab, während bei einer normalen Unterabfrage die äußere Abfrage von der inneren Abfrage abhängt.

3.Leistung: Die Verwendung von Co-bezogenen Unterabfragen verringert die Leistung, da sie NXM-Iterationen anstelle von N+M-Iterationen durchführt. ¨ Co-related Subquery Execution.

Weitere Informationen mit Beispielen:

http://dotnetauthorities.blogspot.in/2013/12/Microsoft-SQL-Server-Training-Online-Learning-Classes-Sql-Sub-Queries-Nested-Co-related.html