Zum Inhalt springen
L

Wikipedia · einfach zusammengefasst · Stand

Join (SQL)

Ein SQL-Join (deutsch: Verbund) bildet aus den Datensätzen zweier Tabellen einer relationalen Datenbank eine Ergebnistabelle, deren Datensätze Attribute beider …

Inhalt5 Abschnitte
  1. 1. Grundidee und Beispieltabellen
  2. 2. CROSS JOIN und innere Joins
  3. 3. Äußere Joins
  4. 4. Self Join und mehrere Tabellen
  5. 5. Unterschiede zwischen Datenbanksystemen

Grundidee und Beispieltabellen

Ein SQL-Join, auf Deutsch Verbund, verknüpft Datensätze aus zwei Tabellen einer relationalen Datenbank zu einer Ergebnistabelle. Diese Ergebnistabelle enthält Attribute beider Tabellen. Welche Datensätze zusammengehören, bestimmt eine Verbundbedingung. Damit setzt SQL das Konzept des Verbunds aus der relationalen Algebra um.

Der SQL-Standard unterscheidet mehrere Arten von Joins: das kartesische Produkt als CROSS JOIN, den inneren Verbund mit NATURAL JOIN und weiteren Varianten, sowie den äußeren Verbund mit LEFT OUTER JOIN, RIGHT OUTER JOIN und FULL OUTER JOIN. Ein Spezialfall ist der Self Join, bei dem eine Tabelle mit sich selbst verbunden wird.

Die Beispiele verwenden die Tabellen Mitarbeiter und Abteilung. Mitarbeiter enthält MId, Name und AbtId. Abteilung enthält AbtId und AbtName. In den Beispieldaten haben Müller, Schmidt und ein weiterer Müller Abteilungen mit den AbtId 31 oder 32. Meyer hat bei AbtId den Wert NULL, also in SQL einen unbekannten Wert. Die Abteilung Marketing mit AbtId 33 hat keine zugeordneten Mitarbeiter.

CROSS JOIN und innere Joins

Ein CROSS JOIN bildet das kartesische Produkt zweier Tabellen: Jeder Datensatz der ersten Tabelle wird mit jedem Datensatz der zweiten Tabelle kombiniert. Bei 4 Mitarbeitern und 3 Abteilungen entstehen deshalb 4 × 3 Datensätze. Wenn beide Tabellen gleichnamige Attribute besitzen, werden sie durch Voranstellen des Tabellennamens unterscheidbar gemacht, zum Beispiel Mitarbeiter.AbtId und Abteilung.AbtId. Seit SQL-92 kann man CROSS JOIN ausdrücklich schreiben; im SQL-Standard von 1989 wurde dieselbe Wirkung mit FROM Mitarbeiter, Abteilung erreicht.

Ein innerer Verbund liefert nur die Kombinationen, die eine Verbundbedingung erfüllen. Meist verlangt diese Bedingung Gleichheit bestimmter Attributwerte, sie kann aber auch andere Vergleichsoperatoren enthalten.

Beim NATURAL JOIN werden automatisch alle gleichnamigen Attribute beider Tabellen verglichen. Im Beispiel ist das gemeinsame Attribut AbtId. Das Ergebnis enthält nur Mitarbeiter, deren AbtId zu einer Abteilung passt: M1 Müller mit Verkauf, M2 Schmidt mit Technik und M3 Müller mit Technik. Meyer erscheint nicht, weil keine Abteilung zugeordnet ist; Marketing erscheint nicht, weil es keine Mitarbeiter hat. Da die verglichenen AbtId-Werte gleich sind, steht AbtId im Ergebnis nur einmal.

JOIN ... USING ... erlaubt, die Vergleichsattribute ausdrücklich anzugeben, zum Beispiel USING (AbtId). Im Beispiel ergibt das dasselbe Ergebnis wie NATURAL JOIN. Diese Form ist vorzuziehen, weil spätere gleichnamige Attribute nicht unbeabsichtigt in den Vergleich einbezogen werden. Wenn etwa beide Tabellen zusätzlich ein Attribut Ort hätten, würde NATURAL JOIN sowohl AbtId als auch Ort vergleichen, obwohl das für die Zuordnung der Abteilungen nicht beabsichtigt sein muss.

JOIN ... ON ... wird verwendet, wenn die zu vergleichenden Attribute unterschiedlich heißen oder wenn ein anderer Operator als = genutzt werden soll. Im Beispiel lautet die Bedingung ON Mitarbeiter.AbtId = Abteilung.AbtId. Das Ergebnis entspricht inhaltlich JOIN ... USING ..., aber beide verglichenen Attribute können im Ergebnis erscheinen. Die Formen mit Gleichheitsbedingung heißen Equijoin oder Gleichverbund. Wenn bei JOIN ... ON ... eine beliebige andere Bedingung genutzt wird, etwa mit ≤, spricht man von einem Theta-Join. Das optionale Schlüsselwort INNER kann bei JOIN ... USING ... und JOIN ... ON ... ergänzt werden.

Äußere Joins

Äußere Joins werden verwendet, wenn auch Datensätze erscheinen sollen, zu denen es in der anderen Tabelle keine passende Entsprechung gibt. Das ist wichtig bei unbekannten oder fehlenden Informationen. In den Beispieltabellen betrifft das Meyer, der keiner Abteilung zugeordnet ist, und Marketing, dem keine Mitarbeiter zugeordnet sind.

Ein LEFT OUTER JOIN enthält alle Datensätze der linken Tabelle, also der Tabelle links vom Schlüsselwort JOIN. Gibt es in der rechten Tabelle keinen passenden Datensatz, werden deren fehlende Werte mit NULL aufgefüllt. Bei Mitarbeiter LEFT OUTER JOIN Abteilung USING (AbtId) erscheinen alle Mitarbeiter. Für Meyer stehen die Abteilungsattribute auf NULL. Das Wort OUTER ist optional, kann aber zur Klarheit geschrieben werden.

Ein RIGHT OUTER JOIN bildet zunächst den inneren Verbund und ergänzt Datensätze aus der rechten Tabelle, zu denen links nichts passt. Bei Mitarbeiter RIGHT OUTER JOIN Abteilung USING (AbtId) erscheint zusätzlich die Abteilung Marketing. Da ihr kein Mitarbeiter zugeordnet ist, sind MId und Name NULL. Ein typisches Anwendungsbeispiel ist eine Abfrage, die alle Abteilungen mit der Anzahl ihrer Mitarbeiter ausgibt. Mit GROUP BY und count(MId) erhält man Verkauf 1, Technik 2 und Marketing 0. Dafür ist ein äußerer Verbund nötig, weil Marketing bei einem inneren Verbund gar nicht vorkäme.

Ein FULL OUTER JOIN ist die Vereinigungsmenge der Ergebnisse von LEFT OUTER JOIN und RIGHT OUTER JOIN. Im Beispiel enthält er sowohl Meyer ohne Abteilung als auch Marketing ohne Mitarbeiter.

Self Join und mehrere Tabellen

Ein Self Join verbindet eine Tabelle mit sich selbst. Dabei werden Datensätze derselben Tabelle miteinander verglichen. Damit SQL zwei Datensätze derselben Tabelle gleichzeitig unterscheiden kann, braucht man zwei explizite Tupelvariablen, also Aliasnamen für dieselbe Tabelle.

Im Beispiel sollen Mitarbeiter mit gleichem Namen, aber verschiedener MId gefunden werden. Dazu wird Mitarbeiter zweimal verwendet, etwa als MA und MB. Die Bedingung MA.MId <> MB.MId AND MA.Name = MB.Name findet M1 Müller und M3 Müller. SQL erzeugt bei SELECT-Anweisungen grundsätzlich eine Tupelvariable für jede Tabelle; normalerweise heißt sie wie die Tabelle selbst. Beim Self Join werden zwei solche Variablen für dieselbe Tabelle benötigt.

Joins können auch mit mehr als zwei Tabellen gebildet werden, weil eine Tabellenreferenz selbst wieder ein Join sein kann. Wenn zusätzlich eine Tabelle Adresse existiert, kann man beispielsweise Mitarbeiter mit Adresse über AdrId und anschließend mit Abteilung über AbtId verbinden. Der innere Verbund ist, abgesehen von der Reihenfolge der Attribute im Ergebnis, kommutativ und assoziativ. Der äußere Verbund ist nicht kommutativ und im Allgemeinen auch nicht assoziativ. Wenn mehrere Tabellen und verschiedene Join-Formen kombiniert werden, sind Klammern zur Klarheit ratsam.

Unterschiede zwischen Datenbanksystemen

Datenbankmanagementsysteme weichen teilweise vom SQL-Standard ab oder bieten eigene Schreibweisen. IBM Db2 unterstützt NATURAL JOIN nicht. Microsoft SQL Server verwendet den SQL-Dialekt Transact-SQL und unterstützt NATURAL JOIN sowie JOIN ... USING ... nicht; dort gibt es nur die Variante mit ON, mit der sich aber alle Aufgabenstellungen bewältigen lassen.

MySQL unterstützt alle Join-Formen entsprechend SQL-92, hat aber zusätzlich STRAIGHT JOIN. Damit wird dem Anfrageoptimierer die Reihenfolge vorgegeben, in der der Join ausgeführt werden soll. MySQL unterstützt FULL [OUTER] JOIN nicht; diese Form kann mit LEFT/RIGHT OUTER JOIN und UNION nachgebildet werden.

Oracle hatte eine proprietäre Syntax für äußere Joins. Erst 2001 mit Version 9 wurde die SQL-92-Syntax für äußere Joins eingeführt; heute empfiehlt Oracle die dem SQL-Standard entsprechende Syntax. PostgreSQL unterstützt alle Join-Formen entsprechend SQL-92. SQLite unterstützt nur LEFT OUTER JOIN; RIGHT OUTER JOIN und FULL OUTER JOIN können dort mit LEFT OUTER JOIN und UNION nachgebildet werden.

Lernvideos zu Join (SQL)

Weiterlesen

Datenbanktabelle Eine Datenbanktabelle ist eine Sammlung verwandter Daten, die in einem strukturierten Format in einer Datenbank gespeichert sind. Sie besteht aus Spalten … Relationale Datenbank Eine relationale Datenbank ist eine digitale Datenbank, die zur elektronischen Datenverwaltung in Computersystemen dient und auf einem tabellenbasierten … Relationale Algebra In der Theorie der Datenbanken versteht man unter einer relationalen Algebra oder Relationenalgebra eine Menge von Operationen zur Manipulation von … Kartesisches Produkt Das kartesische Produkt oder Mengenprodukt ist in der Mengenlehre eine grundlegende Konstruktion, aus gegebenen Mengen eine neue Menge zu erzeugen. Mengendiagramm Mengendiagramme dienen der grafischen Veranschaulichung der Mengenlehre. Es gibt unterschiedliche Arten von Mengendiagrammen, insbesondere Euler-Diagramme … Syntaxdiagramm Jede Erweiterte Backus-Naur-Form (EBNF) kann mithilfe der nebenstehenden Grafik eins zu eins in ein Syntaxdiagramm umgewandelt werden. Beispiel. Bearbeiten. Assoziativgesetz Eine Verknüpfung ist assoziativ, wenn die Art der Klammerung bei der Ausführung keinen Einfluss auf das Ergebnis hat. Die Klammerung kann also bei einer … Oracle (Datenbanksystem) Oracle Database (auch Oracle Database Server, Oracle RDBMS) ist eine Datenbankmanagementsystem-Software des Unternehmens Oracle. Relation (Datenbank) Eine Relation besteht aus Tupeln, jedes Tupel wird durch Attribute beschrieben, die den Typ (mögliche Attributwerte) festlegen und mit einem Attributnamen … Relation (Mathematik) Eine Relation (lateinisch relatio „Beziehung“, „Verhältnis“) ist allgemein eine Beziehung, die zwischen Dingen bestehen kann. Bei Relationen im Sinne der …