Unsere Datenschutzrichtlinie wird in Kürze aktualisiert. Bitte sehen Sie sich die Vorschau an.

SQL Grundkurs 2: Aufgaben und Lösungen

Beispiel 20: OUTER JOIN

Testen Sie unsere 2013 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
Welche Mitarbeiter haben noch keine einzige Bestellung bei einem Lieferanten aufgegeben?

Transkript

In diesem Beispiel möchten wir einen OUTER JOIN nutzen um festzustellen, welche Mitarbeiter noch keine einzige Bestellung bei einem Lieferanten aufgegeben haben. Wir sehen hier das Ergebnis, wir sehen hier Nach- und Vorname der Mitarbeiter und zusätzlich möchten wir noch das Kürzel der Abteilung anzeigen. Zum Glück sehen wir, dass hier im Ergebnis niemand aus der Abteilung "Einkauf", das wäre das Kürzel "EK", enthalten ist, denn sonst würde das bedeuten, dass jemand der im Einkauf arbeitet noch nie was bestellt hat und das wäre nicht gut. Gejoint können diese zwei Tabellen, nämlich die Personalen und die Bestellungen, über eine Beziehung werden. Wir haben hier in der "bestellung" die Spalte "bearbeiter", Das ist der Fremdschlüssel, der auf die Personalnummer in der Personaltabelle verweist. Angezeigt sollen aber nur jene Mitarbeiter werden, die in der Bestelltabelle nicht vorkommen, d. h. deren Personalnummer bei keiner einzigen Bestellung als Bearbeiter eingetragen ist. Pausieren Sie nun das Video und lösen Sie die Aufgabe. Wenn Sie damit fertig sind, fahren Sie mit dem Video fort und sehen Sie sich meine Musterlösung an. Sehen wir uns nun an, wie diese 14 Treffer zustande kommen. Hier haben wir das entsprechende Statement. Ich habe mit der Personaltabelle begonnen, Sie hätten natürlich auch mit der Tabelle "bestellungen" beginnen können. Wir wollen alle Mitarbeiter, auch wenn sie in keiner Bestellung vorkommen, Und wir haben jetzt in unserer Reihenfolge zuerst die Personaltabelle, also die Mitarbeiter, und danach die Bestellungen verwendet. Und die Tabelle, aus der wir alles wollen, auch wenn es in der anderen Tabelle nicht vorkommt, finden wir früher, weiter links in der Anweisung, und deshalb müssen wir sie mit einem LEFT OUTER JOIN umsetzen. Ähnlich wie beim "INNER JOIN", kann auch beim "OUTER JOIN" das Schlüsselwort "OUTER" weggelassen werden, Wir könnten stattdessen auch nur hier "LEFT JOIN" verwenden. In der Join-Bedingung finden wir Personalnummer aus der Personaltabelle gleichgesetzt mit der Bearbeiterspalte aus der Tabelle "bestellungen". Um nicht alle anzuzeigen ... das würden wir nämlich mit dem ersten Teil hier tun ... müssen wir noch jene filtern die in der Tabelle "bestellungen" nicht enthalten sind. Dies erreichen wir, indem wir eine Spalte aus der anderen Tabelle, in dem Fall aus der Tabelle "bestellungen" null setzen, die von sich aus nicht null sein kann. Ein Tipp an dieser Stelle: Um nicht bei jeder einzelnen Spalte zu prüfen, ob sie null sein kann oder nicht, gibt es zwei Spalten, die Sie immer verwenden können ohne lange zu überlegen. Einerseits ist das die Primärschlüsselspalte aus der anderen Tabelle, in unserem Fall die Bestellnummer, oder Sie könnten auch immer die Spalte nehmen, die Sie in der Join-Bedingung stehen haben. Das würde bedeuten, in unserem Fall, "b.bearbeiter" wäre gleichwertig mit "b.bstnr" und wenn diese null sind, dann eben nur dann, weil es für diese Mitarbeiter keine Bestellung gibt. Über die ORDER BY-Klausel mit "p.nachname" haben wir die Sortierung für den Nachnamen implementiert. Wir führen diese Anweisung hier nun aus. Um Ihnen zu zeigen, dass die Reihenfolge definiert, in der wir die Tabelle schreiben, ob es ein LEFT oder RIGHT OUTER JOIN ist, tausche ich jetzt einfach die Reihenfolge hier aus, d. h. ich beginne hier mit den "bestellungen" und fahre dann mit der Personaltabelle fort. Und jetzt muss ich einfach nur statt einem LEFT, einen RIGHT OUTER JOIN umsetzen um exakt dasselbe Ergebnis hier zu bekommen. Und dann haben wir hier diese Treffer und das ist das gleiche Ergebnis, das wir mit unserer vorherigen Anweisung erzielt haben. Betrachten wir uns dasselbe auch unter Oracle. Auch hier haben wir dieselbe Anweisung. Und um zu zeigen, dass es hier wirklich eins zu eins übernommen werden kann, kopiere ich jetzt die zweite Variante einfach mit Copy/Paste hier in den anderen Editor hinein und führe ihn aus. Und auch hier bekommen wir genau dasselbe Ergebnis. Und auch unter dem Microsoft-SQL-Server finden wir diesen OUTER JOIN auf dieselbe Art und Weise implementiert, umgesetzt. und auch hier kopiere ich noch die Variante mit dem RIGHT OUTER JOIN. Und wie erwähnt, könnte ich das Schlüsselwort "OUTER" hier auch einfach weglassen. Das ist eine Variante, die möglich ist. Es ist Geschmackssache, wie Sie das umsetzen wollen. Und auch das verändert nichts am Ergebnis. Es geht also immer darum, wo steht in der Anweisung die Tabelle, aus der wir alles möchten, auch wenn es in der anderen nicht vorkommt. Und ist diese Tabelle früher oder weiter links in der Anweisung, benötigen wir einen LEFT OUTER JOIN, steht die Tabelle wie hier, in dieser Umsetzungsvariante später oder weiter rechts in der Anweisung, handelt es sich eben um einen RIGHT OUTER JOIN.

SQL Grundkurs 2: Aufgaben und Lösungen

Vertiefen Sie Ihre SQL-Kenntnisse. In diesem Workshop erhalten Sie zahlreiche Beispielaufgaben, die Sie selbst lösen können. Anschließend zeigt Ihnen der Trainer die Lösung.

7 Std. 41 min (61 Videos)
Derzeit sind keine Feedbacks vorhanden...
 

Dieses Training setzt SQL-Kenntnisse voraus, wie sie beispielsweise in „SQL lernen und anwenden“ vermittelt werden.

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!