Hauptmenü

Untermenü

MySQL - Joins

1. Mathematik

Wie ich schon eingangs sagte, basiert MySQL auf der relationalen Algebra. Und darum werde ich euch nun mit ein paar Prinzipien vertraut machen. Aber keine Angst, mein letzter Matheuntericht liegt schon so weit zurück, dass ich nicht mit irgendwelchen Formeln quälen werde. Nein, ich werde versuchen, das so einfach wie möglich zu erklären.

Grundsätzliche Unterscheidung

Einfach gesagt unterscheidet man drei verschiedene Typen von Joins. Dabei geht es um die Art und Weise, wie die Spalten von mehreren Tabellen verknüpft werden.

2. Einfacher Join

Dabei wird ein so genanntes kartesisches Produkt gebildet. Das bedeutet, dass jede Zeile der Tabelle blubb mit jeder Zeile von blubber verknüpft wird.


SELECT FROM blubbblubber;

'blubb'    'blubber'    Ergebnis
+--+----+  +--+----+    +--+----+--+----+
|id|text|  |id|text|    |id|text|id|text|
+--+----+  +--+----+    +--+----+--+----+
| 1|a   |  | 1|x   |    | 1|a   1|x   |
| 2|b   |  | 2|y   |    | 1|a   2|y   |
+--+----+  +--+----+    | 2|b   1|x   |
                        | 2|b   2|y   |
                        +--+----+--+----+

Natürlich ist dieses Ergebnis nicht zu gebrauchen, da es keinerlei Beziehungen zwischen den Datensätzen gibt.

3. Equi/Non-Equi Join

Hier wird auf Gleichheit bzw. Ungleichheit zwischen einzelnen Spalten geprüft.

Equi Join


blubb.id blubber.id
'blubb'    'blubber'    Ergebnis
+--+----+  +--+----+    +--+----+--+----+
|id|text|  |id|text|    |id|text|id|text|
+--+----+  +--+----+    +--+----+--+----+
| 1|a   |  | 1|x   |    | 1|a   1|x   |
| 2|b   |  | 2|y   |    | 2|b   2|y   |
+--+----+  +--+----+    +--+----+--+----+

Non-Equi Join


blubb.id != blubber.id
'blubb'    'blubber'    Ergebnis
+--+----+  +--+----+    +--+----+--+----+
|id|text|  |id|text|    |id|text|id|text|
+--+----+  +--+----+    +--+----+--+----+
| 1|a   |  | 1|x   |    | 1|a   2|y   |
| 2|b   |  | 2|y   |    | 2|b   1|x   |
+--+----+  +--+----+    +--+----+--+----+

4. Natural Join

In diesem Fall wird nach Spalten mit gleichem Namen und identischem Inhalt gesucht. Bei einer Übereinstimmung werden sie zu einer Spalte zusammengeführt.


blubb.id blubber.id
'blubb'    'blubber'    Ergebnis
+--+-----+  +--+-----+    +--+-----+-----+
|id|text1|  |id|text2|    |id|text1|text2|
+--+-----+  +--+-----+    +--+-----+-----+
| 1|a    |  | 1|x    |    | 1|a    |x    |
| 2|b    |  | 2|y    |    | 2|b    |y    |
+--+-----+  +--+-----+    +--+-----+-----+

zurück zum vorherigen Abschnitt weiter zum nächsten Abschnitt