Verknüpfungstypen
Beim Verknüpfen von Tabellen bestimmt der verwendete Jointyp darüber, welche Zeilen im Resultset aufgeführt werden. Sie können die folgenden Jointypen erstellen:
Innerer Join Bei diesem Join werden nur die Zeilen angezeigt, die in beiden verknüpften Tabellen übereinstimmen. (Dies ist der Standardjointyp im Abfrage- und Ansicht-Designer.) Sie können z. B. die Tabellen titles und publishers verknüpfen, um ein Resultset mit dem Namen des Herausgebers für jeden Titel zu erstellen. In einem inneren Join werden Titel, für die keine Informationen zum Herausgeber vorliegen, sowie Herausgeber ohne gespeicherte Titel nicht in das Resultset aufgenommen. Für einen solchen Join kann folgende SQL-Anweisung formuliert werden:
SELECT title, pub_name FROM titles INNER JOIN publishers ON titles.pub_id = publishers.pub_id
Tipp
Spalten mit dem Wert NULL liefern bei keinem Wert eine Übereinstimmung, wenn Sie einen inneren Join erstellen, und werden daher nicht in das Resultset aufgenommen. Nullwerte liefern keine Übereinstimmung mit anderen Nullwerten.
Äußerer Join Bei diesem Join werden Zeilen auch dann in das Ergebnis aufgenommen, wenn keine zugehörigen Spalten in der verknüpften Tabelle vorhanden sind. Sie können unter drei Variationen eines äußeren Joins wählen, um festzulegen, welche Zeilen ohne Übereinstimmung im Ergebnis angezeigt werden sollen:
Linker äußerer Join Alle Zeilen der zuerst angegebenen Tabelle (d. h. der "linken" Tabelle, die in der JOIN-Klausel ganz links steht) werden aufgenommen. Zeilen in der rechts stehenden Tabelle ohne Übereinstimmung werden nicht im Ergebnis angezeigt. Die folgende SQL-Anweisung ist ein Beispiel für einen linken äußeren Join der Tabellen titles und publishers, bei dem alle Titel aufgenommen werden, auch wenn keine Informationen zum Herausgeber eines Titels vorliegen:
SELECT titles.title_id, titles.title, publishers.pub_name FROM titles LEFT OUTER JOIN publishers ON titles.pub_id = publishers.pub_id
Rechter äußerer Join Alle Zeilen der zweiten Tabelle (d. h. der "rechten" Tabelle, die in der JOIN-Klausel ganz rechts steht) werden aufgenommen. Zeilen in der links stehenden Tabelle ohne Übereinstimmung werden nicht im Ergebnis angezeigt. Beispielsweise werden bei einem rechten äußeren Join der Tabellen titles und publishers alle Herausgeber aufgenommen, auch wenn keine zugehörigen Titel in der Tabelle titles vorhanden sind. Hierfür kann folgende SQL-Anweisung formuliert werden:
SELECT titles.title_id, titles.title, publishers.pub_name FROM titles RIGHT OUTER JOIN publishers ON titles.pub_id = publishers.pub_id
Vollständiger äußerer Join Alle Zeilen aus allen verknüpften Tabellen werden aufgenommen, auch wenn keine Übereinstimmungen vorliegen. Beispielsweise werden bei einem vollständigen äußeren Join der Tabellen titles und publishers alle Titel und Herausgeber zurückgegeben, auch wenn keine Übereinstimmung in der jeweils anderen Tabelle vorhanden ist.
SELECT titles.title_id, titles.title, publishers.pub_name FROM titles FULL OUTER JOIN publishers ON titles.pub_id = publishers.pub_id
Tipp
Einige Datenbanken, z. B. Oracle, unterstützen keine vollständigen äußeren Joins.
Cross Join Bei diesem Join wird im Resultset für jede mögliche Zeilenkombination aus beiden Tabellen eine Zeile zurückgegeben. Ein Cross Join der Tabelle der Autoren mit der Tabelle der Herausgeber liefert z. B. ein Resultset mit einer Zeile für jede mögliche Kombination aus Autor und Herausgeber. Hierfür kann folgende SQL-Anweisung formuliert werden:
SELECT * FROM authors CROSS JOIN publishers
Siehe auch
Konzepte
Arbeiten mit Daten im Ergebnisbereich