1. Wozu Joins?
- Vermeidung von Problemen, die sich durch das Speichern von Daten in einer großen Tabelle ergeben.
- Wichtig: In einer Tabelle befinden sich immer zusammengehörige Angaben (Angaben, die zu einer Entität gehören)
- Durch kleinere (aber mehrere) Relationen kann Redundanz vermieden werden.
- Mehr Flexibilität bei der Analyse der Daten, da die einzelnen Tabellen auf verschiedene Arten miteinander verknüpfbar sind.
2. Was sind Joins?
- Verknüpfungen zwischen zwei oder mehr Tabellen in mySQL
- Es gibt verschiedene Arten von Joins
Unterschiedliche Joins (tlw. mit Bedingungen)
3. Wie erstellt man Joins?
3.1. Kreuzjoin
- Verknüpfung von Tabllen ohne Verknüpfungsbedingung - hier werden alle Datensätze einer Tabelle mit allen Datensätzen aus einer anderen Tabelle kombiniert
- Die Verknüpfung erfolgt über den Primary Key einer Tabelle, der einem Key in einer anderen Tabelle entspricht (er bildet in der anderen Tabelle dann den Foreign Key).
- Problem: Hier werden teilweise Daten gedoppelt, deswegen bietet es sich an, eine Bedingung anzugeben.
3.1.1. Vor dem Join: verschiedene Tabellen anlegen
1Über die Funktion "Tabelle anlegen" kann eine Tabelle erzeugen. Hierzu gibt man den Titel der Tabelle und die Anzahl der gewünschten Spalten an.

2Nun müssen verschiedene Daten - z.B. die Spaltennamen, der Spaltentyp und ihre Länge/Werte angegeben werden. Hier: Spalte 1 trägt den Namen "ID" mit dem Typ "INT" als Länge wurde hier 10 angegeben. Spalte 2 erhält den Titel "translation" und den Typ "VARCHAR" (variable characters) bei einer Länge von 500 Zeichen.
3Danach kann für jede Spalte die ID angegeben werden sowie in diesem Beispiel die englische Übersetzung der einzelnen Sätze.
4Das Ergebnis sollte dann folgendermaßen aussehen:
3.1.2. Joins erstellen - Tabellen verknüpfen
5Kreuzjoin ohne Bedingung:
SELECT * FROM tokens join translations
6Kreuzjoin mit Bedinungen:
SELECT* FROM tokens join translations on (tokens.zeile = translations.ID)
7Hier werden die Werte ausgeblendet, die keine Entsprechung in einem der Felder haben.
SELECT * FROM tokens left join translations on (tokens.zeile = translations.ID)
8oder mit Verwendung der Befehle USING oder ON:
SELECT *,group_concat(token ORDER BY pos SEPARATOR ' ') FROM tokens join translations on (tokens.zeile = translations.ID) GROUP BY zeile ORDER BY tokens.ID
9Hier werden auch solche Werte angezeigt, die über keine Entsprechung in der anderen Tabelle verfügen.
3.2. Selfjoin
- Die (wiederholte) Verknüpfung einer Tabelle mit sich selbst.
- Ist ebenfalls auf unterschiedliche Arten und mit unterschiedlicher Komplexität der Bedingungen möglich.
10einfacher Selfjoin - zeigt die Spalten nebeneinander an:
SELECT* from tokens a join tokens b join tokens c on (a.ID = b.ID-1 AND a.ID = c.ID-2)
11Selfjoin ohne Spaltendopplung - zeigt nur bestimmte Spalten nebeneinander an:
SELECT a.ID,b.ID,c.ID,a.token,b.token,c.token,IF((a.zeile=b.zeile AND b.zeile=c.zeile),a.zeile,'') from tokens a join tokens b join tokens c on (a.ID = b.ID-1 AND a.ID = c.ID-2) WHERE a.zeile=b.zeile AND b.zeile=c.zeile