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
Nächste ÜberarbeitungBeide Seiten, nächste Überarbeitung
faecher:informatik:oberstufe:datenbanken:joinsii:start [23.11.2020 19:59] – [LEFT JOIN] sbelfaecher:informatik:oberstufe:datenbanken:joinsii:start [23.11.2020 21:10] – [INNER JOIN] sbel
Zeile 22: Zeile 22:
 es gibt also keinen Datensatz in den beiden Tabellen, bei denen ''tabelle1.SpaltennameA = tabelle2.Spaltenname'' ist. In diesem Fall erhalten diese Felder den NULL Wert, die Datenfelder der Ausgangstabelle werden aber auf jeden Fall ausgegeben. es gibt also keinen Datensatz in den beiden Tabellen, bei denen ''tabelle1.SpaltennameA = tabelle2.Spaltenname'' ist. In diesem Fall erhalten diese Felder den NULL Wert, die Datenfelder der Ausgangstabelle werden aber auf jeden Fall ausgegeben.
  
-Beispiel: +==== Beispiel: ==== 
 +<code sql> 
 +SELECT * FROM lehrer LEFT JOIN schueler ON lehrer.id=schueler.KLID  
 +</code>
  
 +{{ :faecher:informatik:oberstufe:datenbanken:joinsii:leftjoin01.png |}}
  
 +Es werden also die Lehrer zusammen mit den Schülern ausgegeben, die sie unterrichten. Weil als Selektor ''*'' angegeben war, werden alle Felder beider Tabellen, bei denen die Join-Bedingung erfüllt ist ausgegeben - das wird man meist nicht wollen, s.u. Emmi Nöther hat keine Schüler, da es sich jedoch um einen Left Join handelt, wird ihr Datensatz dennoch ausgegeben und die fehlenden Schüler:innen durch NULL-Felder ersetzt.
 +
 +Natürlich kann man nun wie immer selektieren, welche Felder ausgegeben werden sollen, mit einer WHERE-Clause bestimmte Datensätze herausfiltern oder die Ergebnisse sortieren:
  
 <code sql> <code sql>
-SELECT lehrer.name,lehrer.vorname, schueler.name, schueler.vorname FROM lehrer  +SELECT lehrer.name,lehrer.vorname, schueler.name, schueler.vorname  
-LEFT JOIN schueler ON lehrer.id=schueler.KLID ORDER BY lehrer.name ASC +FROM lehrer  
 +LEFT JOIN schueler ON lehrer.id=schueler.KLID  
 +ORDER BY lehrer.name ASC 
 </code> </code>
  
 {{ :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>
-SELECT lehrer.name  AS Lname,lehrer.vorname AS LVname, schueler.name AS SName, schueler.vorname AS SVname FROM lehrer  +SELECT lehrer.name  AS Lname,lehrer.vorname AS LVname, schueler.name AS SName, schueler.vorname AS SVname  
-LEFT JOIN schueler ON lehrer.id=schueler.KLID ORDER BY lehrer.name ASC +FROM lehrer  
 +LEFT JOIN schueler ON lehrer.id=schueler.KLID  
 +ORDER BY lehrer.name ASC 
 </code> </code>
  
 {{ :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, Datebnsä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 |}}
  • faecher/informatik/oberstufe/datenbanken/joinsii/start.txt
  • Zuletzt geändert: 16.11.2023 11:48
  • von Svenja Müller