Hauptmenü

Untermenü

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      |
+----+--------+-------+   +----+--------------+
|  |      |     |   |  Schlagbohrer |
|  |      |     |   |  Zement       |
|  |      |     |   |  Kneifzange   |
|  |      |     |   |  Brecheisen   |
|  |      |     |   |  Hammer       |
|  |      |     |   |  bla          |
|  |      |     |   +----+--------------+
+----+--------+-------+

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      |
+---------------+--------------+
|             Brecheisen   |
|             Hammer       |
|             Kneifzange   |
|             Schlagbohrer |
|            14 Zement       |
+---------------+--------------+

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