Abfragen über mehrere Da­ten­bank­ta­bel­len rea­li­sie­ren Sie im re­la­tio­na­len Da­ten­bank­mo­dell mithilfe von SQL-JOINs. Bei allen JOIN-Typen mit Ausnahme des CROSS-JOINs handelt es sich um eine Kom­bi­na­ti­on aus kar­te­si­schem Produkt und Selektion.

Das Datenbank-Ma­nage­ment­sys­tem (DBMS) bildet zunächst das Kreuz­pro­dukt zweier Da­ten­bank­ta­bel­len. An­schlie­ßend filtert es das Ergebnis gemäß einer vom Anwender via SQL-Statement de­fi­nier­ten Se­lek­ti­ons­be­din­gung. Der INNER JOIN hebt sich dabei von allen anderen JOIN-Typen durch eine minimale Er­geb­nis­men­ge ab. Als Ergebnis eines INNER JOINs werden lediglich die Da­ten­sät­ze des Kreuz­pro­duk­tes aus­ge­ge­ben, die die Se­lek­ti­ons­be­din­gung erfüllen. Das Resultat ist eine Er­geb­nis­ta­bel­le (ein View) ohne Nullwerte.

KI-Assistent kostenlos – Ihr smarter All­tags­hel­fer
  • DSGVO-konform & sicher gehostet in Deutsch­land
  • Pro­duk­ti­vi­tät steigern – weniger Aufwand, mehr Output
  • Direkt im Browser starten – ohne In­stal­la­ti­on

INNER JOINs in der Praxis

Wir ver­deut­li­chen den INNER JOIN an einem Beispiel und gehen dabei von zwei Tabellen aus. In der Tabelle „mit­ar­bei­ter“ sind die Mit­ar­bei­ter eines Un­ter­neh­mens inklusive Mit­ar­bei­ter-ID (m_id) und zu­ge­hö­ri­ger Abteilung (a_id) erfasst.

Tabelle: mit­ar­bei­ter

m_id nachname vorname a_id
1 Schmidt Udo 3
2 Müller Wolfgang 1
3 Meyer Günther 1
4 Krause Helmut 2
5 Schneider Kevin NULL

Die Tabelle zeigt zwei Be­son­der­hei­ten: Die Mit­ar­bei­ter Müller und Meyer arbeiten in derselben Abteilung. Der Mit­ar­bei­ter Schneider wurde bisher noch keiner Abteilung zu­ge­ord­net.

Die Tabelle „ab­tei­lun­gen“ listet alle Ab­tei­lun­gen des Un­ter­neh­mens inklusive ID und Stand­ort­an­ga­be auf.

Tabelle: ab­tei­lun­gen

a_id be­zeich­nung standort
1 Vertrieb Frankfurt
2 IT Bad Homburg
3 Personal Offenbach
4 Forschung Bad Homburg

Beide Tabellen sind über eine Fremd­schlüs­sel­be­zie­hung mit­ein­an­der verknüpft. Die Ab­tei­lungs-ID, die in der Tabelle „ab­tei­lun­gen“ als Pri­mär­schlüs­sel fungiert, wurde in die Tabelle „mit­ar­bei­ter“ als Fremd­schlüs­sel in­te­griert.

Diese Ver­knüp­fung er­mög­licht uns einen INNER JOIN über beide Tabellen. Ein solcher ist bei­spiels­wei­se notwendig, um zu ermitteln, welcher Mit­ar­bei­ter an welchem Standort tätig ist.

Bei Abfragen re­la­tio­na­ler Da­ten­ban­ken wird in der Regel eine Ent­spre­chung von Primär- und Fremd­schlüs­sel als Se­lek­ti­ons­be­din­gung definiert. Die Bedingung gilt als erfüllt, wenn der aus­ge­wähl­te Fremd­schlüs­sel der einen Tabelle mit dem Pri­mär­schlüs­sel der anderen Tabelle über­ein­stimmt (=). Es werden somit nur die Da­ten­sät­ze aus­ge­ge­ben, die ge­mein­sa­me Werte enthalten.

Ein solcher INNER JOIN wird in der re­la­tio­na­len Algebra fol­gen­der­ma­ßen notiert.

mit­ar­bei­ter⋈a_id=a_idab­tei­lun­gen

Re­la­tio­na­le Da­ten­bank­sys­te­me nehmen Befehle al­ler­dings nicht in der Syntax der re­la­tio­na­len Algebra entgegen, sondern in Form von SQL-State­ments.

SELECT * FROM mitarbeiter INNER JOIN abteilungen ON mitarbeiter.a_id = abteilungen.a_id;

Der Befehl SELECT weist das DBMS an, Daten aus der Datenbank ab­zu­fra­gen. Al­ter­na­tiv bietet SQL die Mög­lich­keit, Daten ein­zu­tra­gen (INSERT INTO), zu ändern (UPDATE) oder zu löschen (DELETE FROM). Auf den Befehl SELECT folgt die Angabe, welche Daten abgerufen werden sollen. Da wir den kom­plet­ten Datensatz abrufen möchten, wählen wir einen ent­spre­chen­den Platz­hal­ter: den Asterisk (*).

Der Befehl SELECT erfordert in jedem Fall das Keyword FROM sowie die Angabe, aus welcher Tabelle bzw. aus welchem Ta­bel­len­ver­bund (JOIN) die Daten abgerufen werden sollen. In unserem Fall ist die Da­ten­quel­le ein INNER JOIN über die Tabellen „ab­tei­lun­gen“ und „mit­ar­bei­ter“. Zudem geben wir mit dem Schlüs­sel­wort ON eine Bedingung für die Ver­knüp­fung an. Wir möchten lediglich die Da­ten­sät­ze ver­knüp­fen und als Er­geb­nis­ta­bel­le ausgeben lassen, bei denen die a_id der Tabelle „mit­ar­bei­ter“ der a_id der Tabelle „ab­tei­lun­gen“ ent­spricht.

Tipp

Da der INNER JOIN der wich­tigs­te SQL-JOIN ist, können Sie das Schlüs­sel­wort „INNER“ bei Bedarf auch weglassen.

Ein INNER JOIN über die beiden Aus­gangs­ta­bel­len mit der Bedingung mit­ar­bei­ter.a_id = ab­tei­lun­gen.a_id liefert folgende Er­geb­nis­ta­bel­le.

Tabelle: SQL INNER JOIN über „mit­ar­bei­ter“ und „ab­tei­lun­gen“

m_id nachname vorname mit­ar­bei­ter.a_id ab­tei­lun­gen.a_id be­zeich­nung standort
1 Schmidt Udo 3 3 Personal Offenbach
2 Müller Wolfgang 1 1 Vertrieb Frankfurt
3 Meyer Günther 1 1 Vertrieb Frankfurt
4 Krause Helmut 2 2 IT Bad Homburg

Ver­gleicht man die Er­geb­nis­ta­bel­le mit den beiden Aus­gangs­ta­bel­len, fällt auf, dass jeweils ein Datensatz aus jeder Tabelle fehlt. Und zwar die Da­ten­sät­ze für deren Wert in der Spalte a_id keine Ent­spre­chung in der jeweils anderen Tabelle vorhanden ist.

(5, Schneider, Kevin, NULL)

und

(4, Forschung, Bad Homburg)

Dem Mit­ar­bei­ter Schneider wurde noch keine Abteilung zu­ge­wie­sen. Der Abteilung Forschung wurden noch keine Mit­ar­bei­ter zu­ge­wie­sen. Beide Da­ten­sät­ze werden bei einem INNER JOIN, der der Ge­gen­über­stel­lung von Mit­ar­bei­tern zu ihren je­wei­li­gen Ab­tei­lun­gen dient, aus­ge­blen­det. Möchten wir hingegen genau solche Un­re­gel­mä­ßig­kei­ten ermitteln und im Rahmen der Abfrage sichtbar machen, sollten wir statt eines INNER JOINs einen OUTER JOIN wählen.

Un­ter­ar­ten des INNER JOINs

INNER JOINs lassen sich als THETA JOINs, EQUI JOINs, NON EQUI JOINs und NATURAL JOINs rea­li­sie­ren.

THETA JOINs, EQUI JOINs und NON EQUI JOINs

Der INNER JOIN der SQL-Ter­mi­no­lo­gie ent­spricht dem THETA JOIN der re­la­tio­na­len Algebra. Der THETA JOIN grenzt sich von EQUI JOINs und NON EQUI JOINs dadurch ab, dass er Anwendern einen un­ein­ge­schränk­ten Satz an Ver­gleichs­ope­ra­to­ren zur Auswahl stellt. EQUI JOINs hingegen schränken die Se­lek­ti­ons­be­din­gung bei Abfragen auf die Gleich­heit von Spal­ten­wer­ten ein. Bei NON EQUI JOINs wiederum sind alle Ver­gleichs­ope­ra­to­ren mit Ausnahme des Gleich­heits­zei­chens erlaubt.

JOIN-Typ Erlaubte Ver­gleichs­ope­ra­to­ren
THETA JOIN = (gleich) < (kleiner als) > (größer als)≤ (kleiner oder gleich)≥ (größer oder gleich)<> (ungleich)!= (ungleich)
EQUI JOIN = (gleich)
NON EQUI JOIN < (kleiner als) > (größer als)≤ (kleiner oder gleich)≥ (größer oder gleich)<> (ungleich)!= (ungleich)

NATURAL JOINs

Werden zwei Tabellen (wie in den vor­an­ge­hen­den Bei­spie­len) über gleich­na­mi­ge Spalten verbunden, werden INNER JOINs in der Regel als NATURAL JOINs umgesetzt.

Bei NATURAL JOINs handelt es sich um eine Unterart des EQUI JOINs. Wie der EQUI JOIN setzt auch der NATURAL JOIN die Gleich­heit zweier Spalten-Werte als Se­lek­ti­ons­be­din­gung voraus.

Ein NATURAL INNER JOIN über die Tabellen „mit­ar­bei­ter und „ab­tei­lun­gen“ ließe sich bei­spiels­wei­se fol­gen­der­ma­ßen rea­li­sie­ren:

SELECT * FROM mitarbeiter INNER JOIN abteilungen USING(a_id);

Das SQL-Statement weist das DBMS an, die auf­ge­führ­ten Tabellen zu verbinden. Die Se­lek­ti­ons­be­din­gung wird mithilfe des Schlüs­sel­worts USING rea­li­siert, das angibt, welche Spalten auf Gleich­heit geprüft werden sollen. Vor­aus­set­zung ist, dass in beiden Tabellen eine Spalte a_id existiert. Da­ten­sät­ze beider Tabellen werden nur dann in die Er­geb­nis­men­ge auf­ge­nom­men, wenn das DBMS iden­ti­sche Werte in den mit a_id be­zeich­ne­ten Spalten vorfindet.

Auch die Er­geb­nis­ta­bel­le des NATURAL JOINs un­ter­schei­det sich von der des klas­si­schen INNER JOINs dadurch, dass gleich­na­mi­ge Spalten der Aus­gangs­ta­bel­len nicht doppelt auf­ge­lis­tet, sondern zu einer ge­mein­sa­men Spalte zu­sam­men­ge­führt werden.

Tabelle: NATURAL JOIN über „mit­ar­bei­ter“ und „ab­tei­lun­gen“

m_id nachname vorname a_id be­zeich­nung standort
1 Schmidt Udo 3 Personal Offenbach
2 Müller Wolfgang 1 Vertrieb Frankfurt
3 Meyer Günther 1 Vertrieb Frankfurt
4 Krause Helmut 2 IT Bad Homburg

Statt die Ab­tei­lungs-IDs beider Tabellen als mit­ar­bei­ter.a_id und ab­tei­lun­gen.a_id doppelt auf­zu­füh­ren, wird lediglich eine Spalte a_id aus­ge­spielt.

Für NATURAL JOINs steht eine Kurz­schreib­wei­se zur Verfügung, die ohne USING-Klausel auskommt. Statt­des­sen verwendet man den Operator NATURAL JOIN. Die Kurz­schreib­wei­se der oben auf­ge­führ­ten Operation ent­spricht folgendem SQL-Statement.

SELECT * FROM mitarbeiter NATURAL JOIN abteilungen;

Der Operator NATURAL JOIN verbindet Tabellen au­to­ma­tisch über gleich­na­mi­ge Spalten. Die Se­lek­ti­ons­be­din­gung muss somit nicht explizit definiert werden.

Hinweis

Ein NATURAL JOIN wird au­to­ma­tisch als INNER JOIN umgesetzt. Möchten Sie hingegen einen OUTER JOIN als NATURAL JOIN umsetzen, sind zu­sätz­li­che Schlüs­sel­wör­ter er­for­der­lich (bei­spiels­wei­se NATURAL LEFT OUTER JOIN).

Zum Hauptmenü