# Kann mir mal jemand das Prinzip von JOINS erklären?



## frager (16. Apr 2007)

hallo, ich komm einfach nicht dahinter, wozu man joins nutzt. es gibt da so viele...outer join, left join, full join, outer left join und wo weiter. wann setzt man welche joins üblicherweise ein?

vielen dank 

ps: wiki hab ich mir schon angesehen...hätte gern mal noch ne erklärung von fachleuten!


----------



## abollm (16. Apr 2007)

Puh, das kann ganz schön lang werden.

Hier mal ein wenig aus einem Text, den ich vor geraumer Zeit zum Thema geschrieben habe (Achtung - Oracle-lastig):

Sollen Informationen aus mehreren Tabellen in einer Abfrage zusammengefasst werden, so wird eine Verknüpfung oder neudeutsch ein so genannter Join benötigt, mit dem die einzelnen Tabellen miteinander verknüpft werden. Diese Beziehung wird in der Regel über die Primär- oder Fremdschlüsselspalte(n) realisiert.

Datenbanktechnisch werden durch die Verknüpfung der gemeinsamen zwei Felder die Datensätze aus der Abfrage gestrichen, die nicht in beiden Tabellen vorkommen. Grundsätzlich können in solchen Fällen aber auch Datensätze vervielfältigt werden, wenn das gemeinsame Feld in einer der Tabellen mehrfach vorkommt.

Es gibt eine Vielzahl von Begriffen im Zusammenhang mit dem Begriff Join, wie:

-	Cross Join
-	Inner Join, Equivalent Join
-	Natural Join
-	Left Join
-	Right Join
-	Left Outer Join
-	Right Outer Join
-	Full Outer Join, Full Join
-	Union Join
-	Semi-Join
-	Theta Join, Non-Equivalent-Join
-	Self-Join

Grundsätzlich kann man diese Begriffe aber in zwei Kategorien einteilen:

1.	Inner-Join und
2.	Outer-Join

1.	Inner-Join
Bei einem Inner-Join wird diese Verknüpfung mittels Gleichheitszeichen vorgenommen. Dies ist der häufigste Fall eines Tabellen-Joins. Für den Inner-Join ist auch der Begriff Equi-Join gebräuchlich.

Auf jeden Fall werden mehrere Tabellen - d. h. mindestens zwei - in der FROM-Klausel aufgezählt und anschließend erfolgt im Rahmen der WHERE-Klausel die vollständige oder teilweise Verbindung der gemeinsamen Felder.

Für einen Inner-Join müssen mindestens zwei Tabellen miteinander verknüpft werden. Die Spalten, mit denen die Tabellen verknüpft werden, müssen in der entsprechenden Anweisung nicht ausgewählt werden.

Das Ergebnis enthält nur die verbundenen Datensätze aus beiden Tabellen, die die Join-Bedingung erfüllen.

Bei einem Mehr-Tabellen-Join werden mehr als zwei Tabellen miteinander verknüpft. Die Struktur entspricht der eines Inner-Joins für zwei Tabellen, nur dass die Join-Bedingung in der WHERE-Klausel für mehr als zwei Tabellen angegeben wird.
Besitzen Spalten aus unterschiedlichen Tabellen den gleichen Namen, dann müssen den Spalten die Tabellennamen vorangestellt werden.

Die Ergebnismenge enthält alle Datensätze der verknüpften Tabellen, die der Join-Bedingung entsprechen.

Ein Self-Join ist eine Verknüpfung einer Tabelle mit sich selbst. Dabei wird die erforderliche Bedingung in der WHERE-Klausel abgebildet

Eine Unterabfrage ist eine besondere Form der Tabellenverknüpfung, bei der in der Auswahlbedingung innerhalb der WHERE-Bedingung Daten aus einer anderen Tabelle abgefragt werden. Es gibt grundsätzlich sowohl die Variante, bei der mit Hilfe einer Unterabfrage die Existenz eines Datensatzes ermittelt wird, als auch diejenige, bei der innerhalb der Auswahlbedingung mit einem Wert oder einem anderen Feld verglichen wird.

2.	Outer-Join
Ein Outer-Join zeigt auch diejenigen Datensätze an, die der einschränkenden Bedingung einer Abfrage nicht entsprechen. Bei einem Outer-Join werden zwei oder mehrere Tabellen so verknüpft, dass mindestens eine Tabelle zur führenden Tabelle wird. In Oracle wird als so genannter Outer-Join-Operator das Pluszeichen (“+“) verwendet, das stets nach dem Namen der Spalte einer Tabelle ohne übereinstimmende Datensätze stehen muss. Der Operator kann auf jeder Seite der WHERE-Klausel, jedoch nie auf beiden Seiten gleichzeitig stehen.

Das Ergebnis eines Outer-Joins enthält die verbundenen Datensätze, die die Join-Bedingung erfüllen. Datensätze der führenden Tabelle werden selbst dann beibehalten, wenn kein passender Datensatz in der verknüpften Tabelle gefunden wurde. Den fehlenden Datensätzen in der verknüpften Tabelle wird in diesem Fall jeweils ein (imaginärer) NULL-Werte zugewiesen.

=========================

Ich habe auch Beispiele, nur sind die zu abstrakt, weil sie sich alle auf eine reale DB-gestützte Anwendung mit jeweils mehreren hundert Tabellen, Sequences, Procedures, Trigger etc. beziehen.

Hth


----------



## Guest (16. Apr 2007)

Paar Beispiele findest du hier: http://www.java2s.com/Code/SQL/Join/CatalogJoin.htm


----------

