Autor Beitrag
DennisXX
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 133



BeitragVerfasst: Di 31.01.12 22:16 
Hallo ncohmal !

Ich habe nochmal eine Frage zu einer korrelierenden bzw. synchronisierten Unterabfrage in SQL.

Grundsätzlich: Ich weiß, dass in SQL verschachtelte Unterabfrage immer von Innen nach außen bzw. von hinten nach vorne ausgewertet werden.

Wo mich das jetzt ein wenig verwirrt ist bei den korrleierenden Unterabfragen. Wie genau stellt sich dieser Sachverhalt dar, wenn bspw. zwei korrelierende Unterabfragen ineinander verschachtelt werden und somit die äußere korrelierende Unterabfrage eine innere korrelierende Unterabfrage einschließt (ich hoffe, es ist verständlich, worauf ich hinaus möchte...also einfach zwei ineinander verschachtelte Unterabfragen...aber eben keine normalen, sondern korrelierende bzw. synchronisierte, die so alleine wosich nicht vom DBMS ausgeführt wrden könnten).

Wie genau stellt sich hier die Auswertungsreihenfolge dar?

Nochmal besten Dank für die Hilfe !

Grüße
Dennis
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Di 31.01.12 23:20 
Zitat:
Wie genau stellt sich hier die Auswertungsreihenfolge dar?


Wie es das macht hängt von der Datenbank, den Metadaten den aktuellen Statistiken etc. ab. Ob von vorne nach hinten, innen nach außen, rechts nach links oder was du dir auch immer ausdenkst ist der Datenbank letztlich schnuppe. SQL definiert welche Daten man haben will aber nicht wie die Datenbank vorgeht damit du die Daten erhältst. Der Optimizer einer Datenbank wird dein SQL in einer (mehr oder weniger) beliebigen Art und Weise umformen so das nach dessen Vorstellung die beste Ausführungsgeschwindigkeit erreicht wird. Du kannst nicht mal mit Sicherheit davon ausgehen das wenn du das SQL 2 mal nacheinander ausführst die selbe Methodik angewendet wird. Insofern gibt es keine echte Antwort auf deine Frage. Das was letztlich ausgeführt wird mag rein gar nichts mehr mit einer Unterabfrage zu tun haben sondern wurde von der Datenbank in einen äquivalenten flachen Join umgeformt.