MySQL - Joins - Inner Join
1. Das Prinzip
Der Inner Join ist praktisch identisch mit dem Prinzip des Equi- bzw Non-Equi-Joins. Dabei wird nach identischen Spalteneinträgen innerhalb mehrerer Tabellen gesucht.
Unsere Tabellen
Hier greifen wir mal in verkürzter Form auf unsere normalisierte Datenbank zurück und nehmen als Beispiel zwei Tabellen, die ich der Übersichtlichkeit halber auf ein Minimum reduziert habe.
Tabelle bestellung Tabelle produkt
+----+--------+-------+ +----+--------------+
| id | anzahl | pr_id | | id | produkt |
+----+--------+-------+ +----+--------------+
| 1 | 1 | 1 | | 1 | Schlagbohrer |
| 2 | 5 | 2 | | 2 | Zement |
| 3 | 3 | 3 | | 3 | Kneifzange |
| 4 | 7 | 4 | | 4 | Brecheisen |
| 5 | 4 | 5 | | 5 | Hammer |
| 6 | 9 | 2 | | 6 | bla |
| 7 | 2 | 4 | +----+--------------+
+----+--------+-------+
Wenn wir nun die jeweilige Anzahl an verkauften Produkten und deren Namen auflisten wollen, so gibt es zwei Möglichkeiten, die sich zwar in der Abfrage unterscheiden, aber dasselbe Resultat liefern.
2. Möglichkeit 1
SELECT
SUM(b.anzahl),
p.produkt
FROM
bestellung b,
produkt p
WHERE
b.pr_id = p.id
GROUP BY
p.produkt
Erläuterung
Die Verknüpfung der einzelnen Datensätze aus den zwei Tabellen läuft über die WHERE
-Klausel b.pr_id = p.id
.
Hier taucht zwar kein JOIN
auf, es ist aber einer. Ach ja, das GROUP BY
wird wegen der SUM
-Funktion
benötigt, weil das so vorgeschrieben ist.
3. Möglichkeit 2
SELECT
SUM(b.anzahl),
p.produkt
FROM
bestellung b
INNER JOIN
produkt p ON (b.pr_id = p.id)
GROUP BY
p.produkt
Erläuterung
Hier arbeiten wir nun mit einem "echten" Inner Join. Dabei legt man bestellung
als "Suchtabelle" fest und mittels
INNER JOIN produkt p ON (b.pr_id = p.id)
verknüpft man sie mit der Tabelle produkt
. In diesem Fall (wie auch
in obigem) ginge es natürlich auch anders herum:
SELECT
SUM(b.anzahl),
p.produkt
FROM
produkt p
INNER JOIN
bestellung b ON (b.pr_id = p.id)
GROUP BY
p.produkt
4. Das Ergebnis
Ist in allen Fällen identisch und so, wie wir es gewollt haben. Bei einem INNER JOIN
ist es somit auch unerheblich, welche
Tabelle man wie mit einer anderen verbindet. Die Beziehung muss nur eindeutig sein.
+---------------+--------------+
| SUM(b.anzahl) | produkt |
+---------------+--------------+
| 9 | Brecheisen |
| 4 | Hammer |
| 3 | Kneifzange |
| 1 | Schlagbohrer |
| 14 | Zement |
+---------------+--------------+
zurück zum vorherigen Abschnitt weiter zum nächsten Abschnitt