Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
faecher:informatik:oberstufe:datenbanken:joinsii:start [24.11.2020 09:44] – [INNER JOIN] sbel | faecher:informatik:oberstufe:datenbanken:joinsii:start [Unbekanntes Datum] (aktuell) – gelöscht - Externe Bearbeitung (Unbekanntes Datum) 127.0.0.1 | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | ====== SQL - Joins II ====== | ||
- | |||
- | Mit dem '' | ||
- | |||
- | Es wird also ein einzelnes Statement an das DMBS gesendet mit dem mehrere Tabellen zugleich abgefragt und direkt verknüpft werden - das Prinzip bleibt jedoch gleich, auch beim Einsatz des JOIN Statements müssen Primär- und Fremdschlüsselspalten angegeben werden, damit eine sinnvolle Ergebnistabelle zurückgegeben wird. | ||
- | |||
- | In MySQL stehen mehrere JOIN-Typen zur Verfügung unter anderem LEFT JOIN, RIGHT JOIN, INNER JOIN. | ||
- | |||
- | ===== LEFT JOIN ===== | ||
- | |||
- | Die Syntax für einen LEFT JOIN ist wie folgt: | ||
- | <code sql> | ||
- | SELECT * FROM tabelle1 | ||
- | LEFT JOIN tabelle2 ON tabelle1.SpaltennameA = tabelle2.Spaltenname | ||
- | LEFT JOIN tabelle3 ON tabelle1.SpaltennameB = tabelle3.Spaltenname | ||
- | WHERE ... | ||
- | </ | ||
- | |||
- | LEFT JOIN bedeutet nun, dass stets alle Zeilen der Tabelle zurückgegeben, | ||
- | |||
- | Es kann jetzt aber sein, dass in der Tabelle die per LEFT JOIN verknüpft wird kein passender Eintrag gefunden wird, | ||
- | es gibt also keinen Datensatz in den beiden Tabellen, bei denen '' | ||
- | |||
- | ==== Beispiel: ==== | ||
- | <code sql> | ||
- | SELECT * FROM lehrer LEFT JOIN schueler ON lehrer.id=schueler.KLID | ||
- | </ | ||
- | |||
- | {{ : | ||
- | |||
- | Es werden also die Lehrer zusammen mit den Schülern ausgegeben, die sie unterrichten. Weil als Selektor '' | ||
- | |||
- | Natürlich kann man nun wie immer selektieren, | ||
- | |||
- | <code sql> | ||
- | SELECT lehrer.name, | ||
- | FROM lehrer | ||
- | LEFT JOIN schueler ON lehrer.id=schueler.KLID | ||
- | ORDER BY lehrer.name ASC | ||
- | </ | ||
- | |||
- | {{ : | ||
- | |||
- | <code sql> | ||
- | SELECT lehrer.name, | ||
- | FROM lehrer | ||
- | LEFT JOIN schueler ON lehrer.id=schueler.KLID | ||
- | WHERE lehrer.name LIKE " | ||
- | ORDER BY lehrer.name ASC | ||
- | </ | ||
- | |||
- | {{ : | ||
- | |||
- | Hier kann man auch nochmal schön demonstrieren, | ||
- | |||
- | <code sql> | ||
- | SELECT lehrer.name | ||
- | FROM lehrer | ||
- | LEFT JOIN schueler ON lehrer.id=schueler.KLID | ||
- | ORDER BY lehrer.name ASC | ||
- | </ | ||
- | |||
- | {{ : | ||
- | |||
- | ===== Weitere Join-Statements ===== | ||
- | |||
- | ==== RIGHT JOIN ==== | ||
- | |||
- | |||
- | Die Syntax von RIGHT JOIN entspricht der von LEFT JOIN. Der Unterschied ist, dass hier die Tabelle die im JOIN hinzugefügt wird als Basis für die Datensätze dient - gibt es keine Treffer, werden die Felder der mit FROM selektierten Tabelle mit NULL-Werten gefüllt: | ||
- | <code sql> | ||
- | SELECT * FROM lehrer RIGHT JOIN schueler ON lehrer.id=schueler.KLID | ||
- | </ | ||
- | |||
- | {{ : | ||
- | |||
- | " | ||
- | |||
- | ==== INNER JOIN ==== | ||
- | |||
- | Bei einem INNER JOIN muss eine passende Zeile in den Tabellen gefunden werden, Datensätze, | ||
- | <code sql> | ||
- | SELECT * FROM lehrer INNER JOIN schueler ON lehrer.id=schueler.KLID | ||
- | </ | ||
- | |||
- | {{ : | ||
- | |||
- | <wrap hi>Das entspricht unserer bisherigen Praxis, zunächst das kartesische Produkt aller beteiligten Tabellen abzufragen((Das geht übrigens mit einem "CROSS JOIN" auch, d.h. '' | ||
- | |||
- | <code sql> | ||
- | SELECT * FROM lehrer, schueler WHERE lehrer.id=schueler.KLID | ||
- | </ | ||