Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung Nächste ÜberarbeitungBeide Seiten der Revision | ||
faecher:informatik:oberstufe:datenbanken:joinsii:start [23.11.2020 20:00] – [LEFT JOIN] sbel | faecher:informatik:oberstufe:datenbanken:joinsii:start [24.11.2020 09:48] – [Aufgaben] sbel | ||
---|---|---|---|
Zeile 3: | Zeile 3: | ||
Mit dem '' | Mit dem '' | ||
- | Es wird aloso 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. | + | 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 | + | In MySQL stehen |
===== LEFT JOIN ===== | ===== LEFT JOIN ===== | ||
Zeile 23: | Zeile 23: | ||
==== Beispiel: ==== | ==== 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> | <code sql> | ||
Zeile 35: | Zeile 42: | ||
{{ : | {{ : | ||
- | Hier kann man auch nochmal schön demonstrieren, | + | <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> | <code sql> | ||
Zeile 45: | Zeile 62: | ||
{{ : | {{ : | ||
+ | |||
+ | ===== 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 | ||
+ | </ | ||
+ | |||
+ | ===== Aufgaben ===== | ||
+ | ---- | ||
+ | {{: | ||
+ | === (A1) === | ||
+ | |||
+ | Vollziehe die Beispiele oben mit der Datenbank schule_klein nach. | ||
+ | |||
+ | ---- | ||
+ | {{: | ||
+ | === (A2) === | ||
+ | |||
+ | * Lösche zunächst die Tabellen '' |