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
Über die Funktion "Tabelle anlegen" kann eine Tabelle erzeugen. Hierzu gibt man den Titel der Tabelle und die Anzahl der gewünschten Spalten an.
Nun 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.
Danach kann für jede Spalte die ID angegeben werden sowie in diesem Beispiel die englische Übersetzung der einzelnen Sätze.
Das Ergebnis sollte dann folgendermaßen aussehen:
3.1.2. Joins erstellen - Tabellen verknüpfen
Kreuzjoin ohne Bedingung:
SELECT * FROM tokens join translations
Kreuzjoin mit Bedinungen:
SELECT* FROM tokens join translations on (tokens.zeile = translations.ID)
Hier werden die Werte ausgeblendet, die keine Entsprechung in einem der Felder haben.
SELECT * FROM tokens left join translations on (tokens.zeile = translations.ID)
oder 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
Hier 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.
einfacher 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)
Selfjoin 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