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 blubb, blubber;
'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