V. 7.2.1 (19.08.10)

Infos

Download

Theorie MySQL

Schnellsuche

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, dass 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    |y    |
2|b    |  | 2|y    |    | 2|b    |x    |
+--+-----+  +--+-----+    +--+-----+-----+

weiter zum nächsten Abschnitt