Schnell und ohne Aufwand die richtige Treffermenge ermitteln

Teil 3: MySQL und JOINs: Datenbank-Anfragen optimieren

SELECT t.name, f.f_nachname,
s.sponsor
FROM ( f1_team AS t INNER JOIN
f1_fahrer AS f
ON t.name = f.name )
INNER JOIN f1_sponsor s ON
t.name = s.name

In einer ersten Join-Bedingung werden die beiden Tabellen f1_team und f1_fahrer über den Namen des Teams verknüpft und anschließend die Zwischentabelle mit der dritten Tabelle f1_sponsor zusammengefügt.

Aus der Ergebnismenge werden die drei Felder name, f_nachname und sponsor selektiert. Über den jeweiligen Alias der Tabelle werden die drei Felder eindeutig ermittelt: t.name, f.f_nachname und s.sponsor.

Komplexere Abfrage

In einer weiteren Abfrage suchen Sie als Erstes alle Fahrer, die 25 Jahre oder jünger sind, das Gründungsjahr deren Rennställe und schließen all diejenigen aus, die keine Sponsoren haben.

Die erste Abfrage können Sie per Left Join machen. In dieser Liste finden Sie jedoch Fahrer, wie "Freddie Flitzer", die aktuell keinen Rennstall haben. Würden Sie einen Inner Join verwenden, so wären die beiden Fahrer ohne Rennstall verloren gegangen.

Jetzt wollen Sie jedoch alle Fahrer finden, die einem Rennstall angehören. Verknüpfen Sie die Zwischentabelle mit einem Right Join, sodass die rechte Tabelle - die der Sponsoren - die maßgebliche Tabelle ist.

SELECT f.f_nachname, f.f_alter,
t.jahr, s.sponsor
FROM ( f1_fahrer AS f LEFT JOIN
f1_team AS t ON f.name = t.name )
RIGHT JOIN f1_sponsor AS s ON
f.name = s.name
WHERE f.f_alter < '25'

Wie Sie sehen, ist bei mehreren Tabellen, die mit einem Left oder einem Right Join verknüpft werden, die Reihenfolge maßgeblich. Machen Sie sich bei einem solchem Konstrukt vorab klar, wie die Ergebnismenge aussehen soll und bilden Sie bewusst erst die erste Verknüpfung ab, betrachten Sie die resultierende Tabelle und überlegen Sie anschließend, welches im zweiten Schritt die richtige Verknüpfung ist.

In unserem letzten Beispiel hätten Sie also im ersten Schritt alle Fahrer ermittelt, die jünger als 25 Jahre alt sind sowie das Gründungsjahr von deren Rennställen.

SELECT f.f_nachname, f.f_alter,
t.jahr
FROM ( f1_fahrer AS f LEFT JOIN
f1_team AS t ON f.name = t.name )
WHERE f.f_alter < '25'

Wie Sie sehen, sind die beiden Fahrer ohne Rennstall noch mit von der Partie. Hätten Sie in diesem Fall einen Inner Join verwendet, wären Sie bereits im ersten Schritt aus der Ergebnismenge gestrichen worden.

Da uns nur die Fahrer mit Sponsoren interessieren, müssen wir mit einem Right Join weitermachen, damit die leeren Einträge verschwinden. Wären Sie mit einem Inner Join gestartet, wäre bei unserer Ausgangsmenge entweder ein Left oder ein Inner Join zum gleichen Ergebnis gekommen.

Zwei unterschiedliche Schlüssel

Bis jetzt haben alle Tabellen das gleiche Feld - name - als Verknüpfung gehabt. Im folgenden Beispiel zeigen wir Ihnen anhand der zusätzlichen Tabelle f1_werk, wie Sie drei Tabellen mit unterschiedlichen Schlüsseln miteinander verknüpfen.

Verknüpft werden sollen die Tabellen f1_team, f1_sponsor und f1_werk. In der Abfrage sollen alle Teams ermittelt werden, welche eigene Motoren herstellen, der Herstellungsort der Motoren sowie die Sponsoren der Teams.

Den Ausgangspunkt bildet somit die Verknüpfung der beiden Tabellen f1_team und f1_motor. Der Schlüssel der Tabelle m_hersteller zeigt an, ob der Rennstall eigene Motoren herstellt - dies trifft beim Wert X entsprechend zu. Somit lautet der erste Teil der Abfrage wie folgt:

SELECT t.name, w.werk
FROM (f1_team AS t INNER JOIN
f1_werk AS w ON t.motor = w.motor )
WHERE t.m_hersteller = 'X'

In der Ergebnismenge finden Sie neben den in der Formel 1 vertretenen Herstellern auch die beiden Testeinträge des Beispiels: "Fantasie-Team 1" und "Flotter Auspuff".

Im zweiten Schritt stellt sich die Frage, ob Sie als Ausgangsmenge an den Motorenherstellern interessiert sind und dazu die Sponsoren möchten oder nur die Rennställe, welche auch Sponsoren besitzen.

Im ersten Fall nutzen Sie einen Left Join, um für alle Einträge aus der Zwischentabelle die Sponsoren hinzuzufügen.

Mehr zum Thema

Youtube Sperre umgehen GEMA
Videos freischalten

So umgehen Sie die GEMA-Sperre bei Youtube. Was Sie dazu brauchen, und wie es am einfachsten geht.
Neue Fritzboxen unterstützen den AC-Standard.
WLAN-Geschwindigkeit verdoppeln

Mehr WLAN-Geschwindigkeit: Mit dem WLAN-Standard 802.11ac und den richtigen Geräten und Einstellungen verdoppeln Sie den Datendurchsatz.
Netflix auf dem TV
Programm in der Übersicht

Welche Filme und Serien gibt es bei Netflix eigentlich zu sehen? Was ist neu im Streaming-Angebot? Diese Antworten helfen weiter.
Netflix
Streaming

Preise, kompatible Geräte, Datenrate, Serien- und Filmangebot von Netflix: Wir beantworten die wichtigsten Fragen rund um den Streaming-Dienst.
E.T. – Der Außerirdische
Vorschau auf Film- und Serien-Highlights

Amazon Prime Instant Video lockt im Dezember 2016 mit Film-Highlights wie "E.T.", "Fast & Furious 7" und der Serie "Ku’damm 56​".