join

Joins, auf Deutsch Verknüpfung, dienen in SQL zur Verbindung von Tabellen und/oder Views (auf Deutsch Sichten). Es gibt Joins mit Filter-Charakter, sogenannte Inner Joins, und solche ohne Filter-Charakter, die Outer Joins. Jede Verknüpfung geschieht über sogenannte Schlüssel.

In relationalen Datenbanken erfolgt eine Normalisierung der Daten um Redundanzen und Datenfehler zu vermeiden. Z.B. werden Adressen und die dazugehörigen Orte in separaten Tabellen gespeichert. Um eine Adresse mit Ort zu verwenden müssen die Adresstabelle und die Ortstabelle miteinander verbunden werden. In SQL wird dies mit einer Verknüpfung erreicht. Als Syntax Komponente ist seit dem Standard SQL-92 die Join-Klausel vorgesehen:

Joint-Klausel als Syntax-Komponente (oben) und ältere Syntax (unten)

Joint-Klausel als Syntax-Komponente (oben) und ältere Syntax (unten)

Die Verbindung erfolgt immer mittels eines oder mehrerer Schlüsselwerte. Im obigen Beispiel ist der Schlüssel die Spalte Ort_ID. Stimmt eine Ort_ID in der Tabelle Adresse mit einer Ort_ID in der Tabelle Ort überein, so werden die beiden Datensätze aus den beiden Tabellen zu einem einzigen Datensatz vereint. Dabei können vereinfacht dargestellt folgende Relationen auftreten:

  1. Die 1:n-Verknüpfung: Für jede Ort_ID in der Tabelle Ort kann es 0, 1 oder mehrere Ort_IDs in der Tabelle Adresse geben. Der Datensatz der Tabelle Ort wird dabei mit jedem entsprechenden Datensatz der Tabelle Adresse verbunden.
  2. Die 1:1/0-Verknüpfung: Für jede Ort_ID in der Tabelle Ort kann es 0 oder max. 1 entsprechenden Datensatz in der Tabelle Adresse geben. Dieser Fall kann z.B. bei Auslagerungstabellen vorkommen, deren Zweck es ist, die Datenmenge der Haupttabelle zu reduzieren indem selten benutzte Daten in eine eigene Tabelle ausgelagert werden.
  3. Die m:n-Verknüpfung: Hier kann die gleiche Ort_ID sowohl in der Tabelle Ort wie auch in der Tabelle Adresse mehrmals vorkommen. Da die Datenbank die Verknüpfung nicht eindeutig zuordnen kann, erzeugt sie alle möglichen Verknüpfungsvarianten. Dadurch vervielfacht sich die Anzahl resultierender Datensätze der Verknüpfung. Für eine Ort_ID: Existiert die gleiche Ort_ID 3x in Ort und 10x in Adresse resultierend daraus 30 Datensätze.

    Grafische Darstellung der drei Join-Arten

    Grafische Darstellung der drei Join-Arten

    Schlimmstenfalls entsteht ein sogenanntes kartesisches Quadrat, also eine "alle mit allen"-Verknüpfung. M:n-Relationen kommen in fachlichen Definitionen häufig vor, sollten auf Datenebene in den meisten Fällen aber vermieden resp. durch eine geeignetere Struktur ersetzt werden. Das kann z.B. eine zwischengelagerte Verknüpfungstabelle sein, die eine m:n Relation abbildet, aber zu den Ursprungstabellen jeweils eine 1:n-Verknüpfung enthält.

Es gibt drei Arten von Verknüpfungen:

  1. Verknüpfungen mit Filter-Charakter, die Inner Joins: Sie bilden die Schnittmenge zwischen zwei Tabellen, in der nur die Datensätze enthalten sind die einen in beiden Tabellen enthaltenen Schlüssel haben.
  2. Verknüpfungen ohne Filter-Charakter, die Outer Joins: Hier ist auf jeden Fall jeder Datensatz der ersten Tabelle enthalten, unabhängig ob es einen entsprechenden Schlüssel in der zweiten Tabelle gibt. Wo dieser Schlüssel fehlt wird ein Dummy-Datensatz aus lauter Leerwerten (Null-Werte) als Ersatz für die Spalten der zweiten Tabelle erzeugt.
  3. Eine Erweiterung der Outer Joins sind die Full Outer Joins. Bei diesen kommen auf jeden Fall alle Datensätze beider verknüpften Tabellen vor. Dort wo es eine Verknüpfung gibt, wird diese gemacht, dort wo es keine gibt wird wie bei [2.] jeweils ein Dummy-Datensatz erzeugt. Hinweis: Full Outer Joins erzeugen immer partielle m:n-Relationen.

SQL-Abfragen und -Anweisungen enthalten in der Praxis oft mehrere Verknüpfungen. Dadurch können komplexe Datenstrukturen über mehrere Tabellen in einer Abfrage resp. Anweisung vereint werden, z.B. Adresse, Ort, Land, Person, Vertrag, usw.

Informationen zum Artikel
Deutsch: Verknüpfung
Englisch: join
Veröffentlicht: 30.10.2013
Wörter: 588
Tags: #Analyse
Links: Abfrage, Adresse, Anweisung, cartesian square, Daten
1