faecher:informatik:oberstufe:datenbanken:joinsii:start

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung
Nächste Überarbeitung
Vorherige Überarbeitung
faecher:informatik:oberstufe:datenbanken:joinsii:start [23.11.2020 20:06] sbelfaecher:informatik:oberstufe:datenbanken:joinsii:start [16.11.2023 11:48] (aktuell) – [SQL - Joins II] Svenja Müller
Zeile 1: Zeile 1:
 ====== SQL - Joins II ====== ====== SQL - Joins II ======
  
-Mit dem ''JOIN''-Statement lassen sich Werte aus mehreren Tabellen direkt kombinieren, ohne zunächst durch die Abfrage mehrerer Tabellen zunächst das Tabellenprodukt zu bilden und dieses anschliessend zu filtern.+Mit dem ''JOIN''-Statement lassen sich Werte aus mehreren Tabellen direkt kombinieren, ohne zunächst durch die Abfrage mehrerer Tabellen das Tabellenprodukt zu bilden und dieses anschliessend zu filtern.
  
-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 vier JOIN-Typen zur VerfügungLEFT JOIN, RIGHT JOIN, INNER JOIN und FULL JOIN.+In MySQL stehen mehrere JOIN-Typen zur Verfügung unter anderem LEFT JOIN, RIGHT JOIN, INNER JOIN.
  
 ===== LEFT JOIN ===== ===== LEFT JOIN =====
Zeile 17: Zeile 17:
 </code> </code>
  
-LEFT JOIN bedeutet nun, dass stets alle Zeilen der Tabelle zurückgegeben, die beim FROM aufgeführt sind - als gewissermaßen "links" stehen. Diese Tabelle stellt die Basis für das Ergebnis dar. +LEFT JOIN bedeutet nun, dass stets alle Zeilen der Tabelle zurückgegeben werden, die beim FROM aufgeführt sind - also gewissermaßen "links" stehen. Diese Tabelle stellt die Basis für das Ergebnis dar. 
  
 Es kann jetzt aber sein, dass in der Tabelle die per LEFT JOIN verknüpft wird kein passender Eintrag gefunden wird,  Es kann jetzt aber sein, dass in der Tabelle die per LEFT JOIN verknüpft wird kein passender Eintrag gefunden wird, 
Zeile 42: Zeile 42:
 {{ :faecher:informatik:oberstufe:datenbanken:joinsii:leftjoin02.png |}} {{ :faecher:informatik:oberstufe:datenbanken:joinsii:leftjoin02.png |}}
  
-Hier kann man auch nochmal schön demonstrieren, wie man mit der Benennung von Feldern mittels ''AS'' die LEsbarkeit der Statements verbessern kann:+<code sql> 
 +SELECT lehrer.name,lehrer.vorname, schueler.name, schueler.vorname  
 +FROM lehrer  
 +LEFT JOIN schueler ON lehrer.id=schueler.KLID  
 +WHERE lehrer.name LIKE "%t%" 
 +ORDER BY lehrer.name ASC 
 +</code> 
 + 
 +{{ :faecher:informatik:oberstufe:datenbanken:joinsii:leftjoin02a.png |}} 
 + 
 +Hier kann man auch nochmal schön demonstrieren, wie man mit der Benennung von Feldern mittels ''AS'' die Lesbarkeit der Statements verbessern kann:
  
 <code sql> <code sql>
Zeile 52: Zeile 62:
  
 {{ :faecher:informatik:oberstufe:datenbanken:joinsii:leftjoin03.png |}} {{ :faecher:informatik:oberstufe:datenbanken:joinsii:leftjoin03.png |}}
 +
 +===== 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 
 +</code>
 +
 +{{ :faecher:informatik:oberstufe:datenbanken:joinsii:rightj01.png |}}
 +
 +"Kartoffelchips" und "Schokocreme" haben keinen Klassenlehrer, diese werden mit NULL aufgefüllt.
 +
 +==== INNER JOIN ====
 +
 +Bei einem INNER JOIN muss eine passende Zeile in den Tabellen gefunden werden, Datensätze, die die JOIN-Bedingung nicht erfüllen werden nicht zurückgegeben. 
 +<code sql>
 +SELECT * FROM lehrer INNER JOIN schueler ON lehrer.id=schueler.KLID 
 +</code>
 +
 +{{ :faecher:informatik:oberstufe:datenbanken:joinsii:innerj.png |}}
 +
 +<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. ''SELECT * FROM lehrer,schueler'' ist dasselbe wie ''SELECT * FROM lehrer CROSS JOIN schueler'')) und dann die passenden Datensätze mit WHERE herauszufiltern:</wrap>
 +
 +<code sql>
 +SELECT * FROM lehrer, schueler WHERE lehrer.id=schueler.KLID 
 +</code>
 +
 +===== Aufgaben =====
 +
 +{{:aufgabe.png?nolink  |}}
 +=== (A1) ===
 +
 +Vollziehe die Beispiele oben mit der Datenbank {{ :faecher:informatik:oberstufe:datenbanken:joinsii:schule_klein_mit_ids.sql.zip |}} nach.
 +
 +----
 +{{:aufgabe.png?nolink  |}}
 +
 +=== (A2) ===
 +
 +  * Lösche zunächst die Tabellen ''schueler'' und ''lehrer'' und importiere die Datenbank {{ :faecher:informatik:oberstufe:datenbanken:joinsii:schule500_sus_keine_keys.zip |}} - diese hat mehr Lehrer und Schüler als die Datenbank aus dem vorigen Beispiel.
 +  * Versehe die Tabellen mit Primär und Fremdschlüsseln.
 +  * Skizziere ein ER Diagramm.
 +
 +Löse die folgenden Aufgaben mit Hilfe des kartesischen Produkts und mit einem INNER JOIN.
 +  * Erstelle eine Klassenliste der 10a
 +  * Erstelle eine Liste aller Schüler, die Feynman als Betreuer haben.
 +  * Wieviele Schüler befinden sich in der Jahrgangsstufe 6?
 +  * Wieviele Schüler haben einen Nachnamen der mit H beginnt.
 +  * Erstelle eine Liste aller Schüler, die in der Unterstufe sind und Salvador Dali als Betreuer haben.
  • faecher/informatik/oberstufe/datenbanken/joinsii/start.1606158395.txt.gz
  • Zuletzt geändert: 23.11.2020 20:06
  • von sbel