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:55] – [LEFT JOIN] sbel | faecher:informatik:oberstufe:datenbanken:joinsii:start [23.11.2020 20:06] – sbel |
---|
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` LEFT JOIN schueler ON lehrer.id=schueler.KLID ORDER BY lehrer.name ASC | SELECT lehrer.name,lehrer.vorname, schueler.name, schueler.vorname |
| 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 AS Lname,lehrer.vorname AS LVname, schueler.name AS SName, schueler.vorname AS SVname |
| FROM lehrer |
| LEFT JOIN schueler ON lehrer.id=schueler.KLID |
| ORDER BY lehrer.name ASC |
| </code> |
| |
| {{ :faecher:informatik:oberstufe:datenbanken:joinsii:leftjoin03.png |}} |