Unterschied zwischen Subquery und Correlated Subquery
Ist die folgende SQL-Abfrage eine normale Abfrage oder eine "Correlated Subquery"?
SELECT UserID,
FirstName,
LastName,
DOB,
GFName,
GLName,
LoginName,
LoginEffectiveDate,
LoginExpiryDate,
Password,
Email,
ReportingTo,
Mobile,
CommunicationPreference,
IsActive
FROM (SELECT row_number() OVER (ORDER BY FirstName) AS Row,
UserID,
FirstName,
LastName,
DOB,
GFName,
GLName,
LoginName,
LoginEffectiveDate,
LoginExpiryDate,
Password,
Email,
ReportingTo,
Mobile,
CommunicationPreference,
IsActive
FROM DivakarUserRegistration) T
Kann mir jemand den Unterschied zwischen den beiden Abfragen erklären?
43
3
Das obige Beispiel ist keine zusammenhängende Sub-Query. Es handelt sich um eine abgeleitete Tabelle / Inline-View, d.h. eine Unterabfrage innerhalb der FROM-Klausel.
Eine korellierte Unterabfrage sollte auf die übergeordnete Tabelle (Hauptabfrage) verweisen. Beispiel: Finde das N-te maximale Gehalt durch eine korellierte Unterabfrage:
Correlated Subquery ist eine Unterabfrage, die Werte aus der äußeren Abfrage verwendet. In diesem Fall muss die innere Abfrage für jede Zeile der äußeren Abfrage ausgeführt werden.
Siehe Beispiel hier http://en.wikipedia.org/wiki/Correlated_subquery
Einfache Unterabfrage verwendet keine Werte aus der äußeren Abfrage und wird nur einmal berechnet:
CoRelated Subquery Beispiel -
Abfrage zum Finden aller Mitarbeiter, deren Gehalt über dem Durchschnitt ihrer Abteilung liegt
Ich denke, die folgende Erklärung wird Ihnen helfen. Unterscheidung zwischen diesen: Korrelierte Unterabfrage" ist eine innere Abfrage, die von der Hauptabfrage (äußere Abfrage) referenziert wird, so dass die innere Abfrage als wiederholt ausgeführt betrachtet wird.
Nicht-korrelierte Unterabfrage" ist eine Unterabfrage, die unabhängig von der äußeren Abfrage ist und selbständig ausgeführt werden kann, ohne auf die äußere Hauptabfrage angewiesen zu sein.
Die "einfache Unterabfrage" ist nicht von der äußeren Abfrage abhängig,