i

Fachkonzept - SQL-Join

Verbinden von Datensätzen in SQL

Will man in SQL Daten aus mehreren Tabellen ausgeben, so werden sog. "Joins" gebildet. Dabei muss der Programmierer angeben, wie die Tabellen miteinander verbunden werden sollen.

Die Abarbeitung eines Joins kann man sich in mehreren Schritten vorstellen:

1. Schritt: Auswahl der Tabellen

Zunächst werden im FROM-Teil alle Tabellen angegeben, die die auszugebenden Daten enthalten. Die Reihenfolge spielt dabei keine Rolle, z.B.:

Das Ergebnis ist unerwartet; das Problem leicht erkennbar, wenn man die Attribute umsortiert:

Cross Join

Statt nur passende Daten auszugeben, wird jedes Land mit allen Kontinenten "gekreuzt"; es entsteht ein sog. cross join der Tabellen land und kontinent ("jeder mit jedem").

2. Schritt: Angabe der Verbindung

Gut erkennbar ist, dass die beiden Attribute KNR (einmal aus der land-Tabelle, einmal aus der kontinent-Tabelle) nicht zueinander passen. Diese Verbindung der Tabellen muss explizit bei der Abfrage im SQL-Befehl angegeben werden.

Um Doppeldeutigkeiten der Attributnamen zu vermeiden, wird jedem Attribut der Tabellenname vorangestellt:

Dies liefert (fast) das gewünschte Ergebnis:

Inner Join

Um zwei Tabellen miteinander zu verbinden (engl. to join), muss im WHERE-Teil des SQL-Befehls eine Joinbedingung angegeben werden.
Diese legt fest, dass nur "passende" Datensätze ausgegeben werden, bei denen der Fremdschlüssel der abhängigen Tabelle zum Primärschlüssel der übergeordneten Tabelle passt (sog. inner join).

3. Schritt: Einschränken des Ergebnisses

Im letzten Schritt kann noch die Anzahl der Datensätze durch weitere Bedingungen eingeschränkt werden. Außerdem sollte die Liste der Attribute eingegrenzt werden (z.B. um die doppelten Angaben aus Fremd- und Primärschlüssel zu entfernen):

Beachte, dass jetzt bei allen Attributen die zugehörige Tabelle vorangestellt wird. Manche Attributnamen kommen dann im Ergebnis doppelt vor (darum kümmern wir uns später):

doppelte Attributnamen

Bei Bedingungen sollten niemals interne Werte der künstlichen Schlüsselattribute verwendet werden. Bedingungen der Form land.KNR='EU' sind sehr fehleranfällig (z.B. wenn intern einmal Schlüssel geändert werden) und können durch Joins ersetzt werden - auch wenn dadurch die Anfrage minimal länger dauert.

Suche

v
3.1.2.6
dev.inf-schule.de/datenbanksysteme/terra/datenverknuepfen/konzept_sql_join
dev.inf-schule.de/3.1.2.6
dev.inf-schule.de/@/page/6cPNHsHBK6yAXAMw

Rückmeldung geben