Web- und Software Development

SQL und die Join Typen

Written By: - Okt• 13•08

Auf der Suche nach den richtigen Join (Verbund) , habe ich mir mal alle (mir bekannten) vorgenommen und geschaut, wann denn welcher am besten passt.

Kartesischer-Join auch Cross-Join oder Kreuzproduct


Dieser (einfachste) Join kreuzt jede Zeile aus der einen Tabelle mit jeder Zeile aus der zweiten Tabelle.
Gibt, wenn in Tabelle1 -> 5 Einträge und in Tabelle2 -> 4 Einträge vorhanden sind, 20 Ergebnisse.(Nicht bei grossen Tabellen anwenden)

SELECT o.order, p.position
FROM order o
CROSS JOIN
position p;

Inner-JoinEqui-Join

Ist im wesentlichen ein Kartesischer Join, hier werden einige Ergebnisse durch eine Abfragebedingung entfernt. Ein Inner-Join kombiniert die Datensätze zweier Tabellen über Vergleichsoperatoren in einer Bedingung.Quasi verknüpft dieser zwei Tabellen mit einer Bedingung und liefert alle Zeilen, bei denen eine Spalte aus der ersten Tabelle, einer Spalte aus der zweiten Tabelle entspricht und verwendet das Schlüsselwort ON (oder WHERE)

SELECT o.order, p.position
FROM order o
INNER JOIN
position p
ON o.orderID = p.orderID;

Natural-Join

Natural-Join werden durch passende Spaltennamen identifiziert und funktionieren nur, wenn die Spalte über der eine Verknüpfung hergestellt wird in beiden Tabellen den selben Namen haben.

SELECT o.order, p.position
FROM order o
NATURAL JOIN
orderID

Inner-Join – Nicht-Equi-Join

Liefert alle Zeilen als Ergebnis die nicht gleich sind

SELECT o.order, p.position
FROM order o
INNER JOIN
position p
ON o.orderID <> p.orderID
ORDER BY o.order;

Outer-Join Left Outer Join
Der Left Outer Join vergleicht jede Zeile in der linken Tabelle mit einer Zeile aus der rechten Tabelle.
In einem Left Outer Join ist die Tabelle, die nach dem FROM und vor dem Join kommt, die treibende Tabelle, die Tabelle die nach dem Join kommt die INNERE Tabelle. Right Outer Join
Der Right Outer Join vergleicht jede Zeile in der rechten Tabelle mit einer Zeile aus der linken Tabelle. Im Grunde wie Left Outer Join, nur hier wird halt die rechte Tabelle mit der linken Tabelle verglichen

Im Vergleich zu den anderen Joins, haben Outer Joins mehr mit der Beziehung zwischen den beiden Tabellen zu tun. Das Problem hier ist es zu wissen, welche Tabelle die treibende Äussere und welche die Innere ist.

Self-Join
Hiermit kann man eine einzelne Tabelle so abfragen, als bestände sie aus zwei Tabellen mit exakt den gleichen Inhalt Nested Loop-Join
Einen Nested Loop (verschachtelte Schleife) sollte die Datenbank immer dann nutzen, wenn zwei Tabellen gejoint werden, bei denen sich die Treffermengen stark unterscheiden.
Man spricht beim Nested Loop dann von der inneren und äußeren Tabelle.
Es sucht sich die Tabelle mit der kleineren Treffermenge und wählt diese als äußere Tabelle.
Für jeden gefundenen Treffer sucht sie in der größeren inneren Tabelle die passenden Ergebnisse.
Die Performance ist also davon abhängig wieviel Treffer in der äußeren Tabelle existieren und wie schnell die Ergebnisse in der inneren Tabelle gefunden werden. Hash Join
Eine Hash-Join-Verknüpfung besteht aus zwei Aktivitäten. Erstens Erstellen der Hashtabelle (Erstellungsphase) und zweitens Testen der Hashtabelle (Testphase).
Sind beim Nested Loop-Join beide Tabellen bzw. Treffermengen gleich groß, würde die äußere Tabelle zu groß werden, hier würde sich das DBMS für einen Hash Join entscheiden.
Dabei werden beide Ergebnismengen nach dem Joinkriterium sortiert und jeweils die obersten Zeilen miteinander verglichen. Es ist kein Index und kein Sortieren erforderlich. mehr lesen

Die Informationen über Nested Loop Join und Hash Join bitte unter Vorbehalt, ich hab da auch noch nichts weiter drüber erfahren können.

Ergänzungen und/oder Berichtigungen sind sehr willkommen.

Ähnliche Beiträge

  • Keine ähnliche Beiträge vorhanden

You can follow any responses to this entry through the RSS 2.0 feed. Both comments and pings are currently closed.