Was du schon immer über JOINs wissen wolltest

Beim ersten SQL-Grundlagenkurs kommst du vielleicht noch nicht auf die Idee, danach zu fragen. Die Übungsbeispiele sind einfach und übersichtlich, alles klar, ist doch ganz easy. Aber irgendwann, wenn du allein über einer komplexen SQL-Abfrage mit vielen zugrundeliegenden Tabellen brütest, ist es soweit.Du fragst dich: Ist es eigentlich egal, in welcher Reihenfolge die Tabellen miteinander verJOINed werden? Bekomme ich ein anderes Ergebnis, wenn ich erst die Kunden mit den Artikeln und dann mit den Rechnungen… oder umgekehrt…?

Ist die Reihenfolge der Tabellen beim JOIN egal?

Die einfache Antwort: Ja, meistens ist egal, die Reihenfolge spielt zum Glück – zumindest bei den am häufigsten verwendeten INNER JOINs – keine Rolle. Du kannst die JOINs zwischen den Tabellen deshalb so hinschreiben, wie es für dich bzw. die zu lösende Aufgabe am meisten Sinn macht. Klasse, dann nutze doch die Gelegenheit und wähle die Reihenfolge so, dass du die Tabellen nach der Wichtigkeit für die Aufgabenstellung anordnest. Möchtest du z.B. für die Datenbank eines Restaurants eine Abfrage erstellen, die eine Übersicht über die Reservierungen des morgigen Tages liefert, dann beginne den FROM-Teil mit der Tabelle tbl_Reservierungen und lass dann tbl_Raeume, tbl_Tische sowie tbl_Gaeste folgen. D.h. wenn du aus der Sicht der Reservierung denkst, beginne auch mit der dafür zuständigen Tabelle. Das hilft dir später, deinen SQL Code leichter nachvollziehen und warten zu können.

Komplizierte Antwort: Für OUTER JOINs kann es schon Fälle geben, in denen die Reihenfolge wichtig ist. Das liegt daran, dass OUTER JOINs als Relationen weder [Achtung Mathe-Alarm ;)] kommutativ noch assoziativ sind. Siehe z.B. die Diskussion hier bei Stack Overflow, wenn du es ganz genau wissen möchtest. Oder hier im SQL Performance Blog von Marcus Winand.

Und die Performance?

Und wie steht es eigentlich mit der Performance? Für den Datenbankserver ist es doch bestimmt wichtig, dass die Tabellen in der optimalen Reihenfolge verknüpft werden? Ja. Aber mach dir da mal keine Hoffnungen. Der Abfrageoptimierer deines Datenbankservers rechnet ohnehin verschiedene Reihenfolgen durch, um den effizientesten Zugriffsweg auf die Daten zu bestimmen. Und das kann der viel schneller und besser – also kümmere du dich einfach darum, dass dein Code für Menschen optimal lesbar ist 😉 Das ist ja das Schöne an SQL: Du beschreibst das gewünschte Ergebnis, also das „WAS“. Der Server kümmert sich um das „WIE“ und sorgt für schnellen Zugriff auf die benötigten Daten.

Buchtipp zum Weiterlesen: Jürgen Sieben, Oracle SQL, Rheinwerk Computing. Absolut genial, nicht nur für Oracle-Fans.

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Scroll to Top