SQL Grundkurs 1: Die Sprache erlernen

JOIN mit mehr als zwei Tabellen

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Ein JOIN mit drei, vier, fünf oder noch mehr Tabellen wirkt auf den ersten Blick unübersichtlich und schreckt schon vor der Umsetzung ab. Dass es aber eigentlich ganz einfach ist, das sehen Sie in diesem Video!

Transkript

Ein "Join" mit mehr als zwei Tabellen ist eine sehr spannende Sache. Wie Sie dabei vorzugehen haben, und was Sie dabei besonders berücksichtigen müssen, sehen Sie in diesem Video. Für unser Beispiel werden wir die fünf hier dargestellten Tabellen verwenden. Hier finden wir einmal unsere Bestellungen. Jede Bestellung ist an einen Lieferanten gerichtet, das sehen wir hier in der Beziehung zwischen Bestellungen und Lieferanten. Die freie Schlüsselspalte "Lieferant" verweist auf die Lieferantennummer des Lieferanten. Für jede Bestellung ist ein Mitarbeiter verantwortlich und zuständig. Deshalb gibt es eine Beziehung zwischen Bestellung und Personal. In der Fremdschlüsselspalte "Bearbeiter" wird die Personalnummer des zuständigen Mitarbeiters gespeichert. Jeder Mitarbeiter gehört einer Abteilung an. In der Spalte "Abtlg" finden wir das Kürzel, das auf die Primärschlüsselspalte der Tabelle "Abteilungen" verweist und auch hier eine Beziehung definiert. Abschließend haben noch die Anreden in diesem Beispiel was zu tun. In der Personaltabelle, in der Spalte "Geschlecht" haben wir jeweils nur ein Kürzel, das drauf hinweist, ob der Mitarbeiter männlich oder weiblich ist. In der Tabelle "Anreden" finden wir zu diesem Kürzel u.a. in der Spalte "Text" den Langtext, so wie "Herr" "Frau". Hier gibt es natürlich noch weitere Einträge in den Anreden, wie z.B. für Firmen, aber diese kommen ja für Mitarbeiter nicht in Betracht. Hier geht es in erster Linie um männlich und weiblich. Wenn wir nun also unsere Bestellungen auflisten wollen, mit den dazugehörigen Lieferanten, mit den zuständigen Personen, der Abteilungsangehörigkeit dieser Personen sowie der Anrede, dann müssen wir diese fünf Tabellen miteinander joinen. Was müssen wir dabei berücksichtigen? Wir müssen uns für einen Ausgangspunkt entscheiden, z.B. wir beginnen mit der Tabelle "Bestellungen". Diese werden wir in der FROM-Klausel als Erste angeben. Dann müssen wir uns weiter handeln. Als nächstes kann ich eine Tabelle dazu joinen, die eine direkte Verbindung zur Bestelltabelle aufweist. Das kann entweder die Tabelle "Lieferanten" sein oder die Tabelle "Personal", denn für beide gibt es eine direkte Verbindung zur Ersten. Welche wir zuerst verwenden ist Geschmackssache. Die Tabellenanreden und Abteilungen können zu diesem Zeitpunkt, also zu Beginn, noch nicht verwendet werden, weil es keine direkte Verbindung zu den Bestellungen gibt. Erst, wenn ich in meiner Anweisung die Personaltabelle gejoint habe, und damit die Brückenkopffunktion festgelegt habe, kann ich danach Anreden und Abteilungen hier dazu joinen. Ich vergleiche diesen Vorgang immer ganz gerne mit einem Indianerspiel in der Kindheit. Wir müssen uns für eine Starttabelle entscheiden, das ist sozusagen ein Pflog, den wir in den Erdboden rammen. Nun wollen wir beim Indianerspiel jede neue Tabelle mit einem Lasso auf den vorherigen Pflog werfen. Das heißt, wir werfen ein Lasso von der Tabelle "Personal" auf den Pflog "Bestellungen", und rammen hier an dieser Stelle den nächsten Pflog in die Erde. Und so arbeiten wir weiter. Von den Anreden werfen wir ein Lasso auf den Pflog "Personal". Das zeigt uns wiederum, dass wir das Lasso erst werfen können, wenn der Pflog "Personal" auch wirklich im Boden steckt. Das heißt, Sie müssen sich einen Ausgangspunkt suchen, mit diesem beginnen, und dann alles Weitere immer dazu hängen. Es muss sozusagen zwischen all diesen Tabellen, über welchen Umweg auch immer, eine direkte Verbindung geben. Starten wir nun mit unseren Anweisungen. Wir beginnen, wie erwähnt mit der Tabelle "Bestellungen". Das ist sozusagen unser "Startpflog", unser Ausgangspunkt. Nun hängen wir jeweils eine weitere Tabelle dazu. Wir setzen mit der Tabelle "Lieferanten" fort. "Inner Join", weil es wieder ein Inner Join werden wird, "Wawi.Lieferanten". Nun benötigen wir natürlich eine Join-Bedingung. Wie gewohnt "ON", und wir haben ja in der Datenbank-Diagrammdarstellung gesehen, dass es eine Beziehung zwischen der Lieferantennummer bei der Bestellung und der Lieferantennummer beim Lieferanten gibt, deshalb können wir das auch als "Join-Bedingung" hier definieren. Also "B.Lieferant" entspricht "L.Lieferantennummer". Und das wäre jetzt sozusagen, wenn wir in unserer Indianerspieltheorie bleiben der erste Lassowurf. Und nun hängen wir der Reihe nach alle weiteren Tabellen dazu. Als nächstes möchten wir die Personaltabelle zu den Bestellungen dazu joinen. Die Bestellungstabelle gibt es ja bereits, deshalb müssen wir diesen Pflog nicht erneut hinein rammen in den Boden. Das bedeutet, wenn wir mehr als einen Join verwenden, wird aber der zweiten Joinnummer die neue Tabelle ergänzt, und die ursprüngliche Tabelle, die es ja schon gibt, nicht ein zweites Mal hingeschrieben. Das heißt, wir schreiben nicht noch einmal "Bestellungen Inner Join Personal", sondern es kommt direkt nur mehr weiter "Inner Join", quasi abgeschrieben von der oberen Zeile. Das ist auch ein Grund, warum ich Ihnen empfehle, hier nach dem Ausgangspunkt, also der ersten Tabelle, schon einen Zeilenumbruch einzubauen, da kommt hier jetzt schon direkt "Inner Join Wawi.PersonalP", und die Join-Bedingung, dass der Bearbeiter, der Bestellung also "B.Bearbeiter" der Personalnummer entspricht, also "Paula.Personalnummer". Und schon haben wir unser zweites Lasso geworfen. Und nach dieser Methode arbeiten wir uns Schritt für Schritt weiter. Wir haben jetzt schon drei Tabellen, nun kommt die vierte. Ob wir nun zuerst die Anreden, oder zuerst die Abteilung joinen, das können wir uns aussuchen. Ich verwende jetzt einmal die Abteilung "Inner Join Wawi.Abteilungen", "A on P.Abtlg = A.Abteilungsnummer". Und das war jetzt schon der dritte Lassowurf. Wenn wir hier kurz einmal innehalten, und das bisherige betrachten, stellt sich natürlich die Frage, woher weiß jetzt das System z.B. ob diese dritte Tabelle zur ersten oder zur zweiten dazuzuhängen ist. Weil, es muss ja nicht immer so linear der Reihe nach vorangehen, es können auch hier Sprünge vorkommen. Genauer genommen weiß das System auf Grund der Join-Bedingung. Da wir hier in der Join-Bedingung auf eine Spalte aus der Tabelle Bestellungen verweisen, weiß das System, dass die dritte Tabelle zur ersten dazu zu joinen ist. Bei der vierten wiederum verweisen wir in der Join-Bedingung auf eine Spalte aus der Personaltabelle, das ist die dritte, und deshalb weiß das System, dass die vierte zur dritten dazu gehängt werden muss. Und so funktioniert das. Nun kommt noch die fünfte und letzte Tabelle, die wir wieder mit einem Inner Join hier ergänzen, Wawi. in dem Fall die Anreden, und jetzt müssen wir Acht geben. "A", das Kürzel, den Tabellen Alias Namen, haben wir schon für die Abteilungen vergeben, das heißt, für die Anreden steht der nicht mehr zur Verfügung. Wir müssen uns nun für ein anderes Kürzel entscheiden, entweder ein "R" oder z.B. "AR", es kann ja auch zwei Buchstaben hier verwendet werden, das ist jetzt egal. Aber auf jeden Fall muss der Tabellen Alias Name, den wir hier vergeben, eindeutig sein. Also "On" und wir wissen aus dem Diagramm, dass die Spalte Geschlecht ein Fremdschlüssel ist zur Anredenummer, deshalb können wir das als Join-Bedingung verwenden, denn die Beziehung ist ja meist die Vorgabe für den Join. "Anrede.Anredenummer". Und das war jetzt schon unser vierter Lassowurf. Sie sehen also, so unspektakulär ist es, wenn man mehr als zwei Tabellen miteinander joint. Wir können nun die Anweisung fertigstellen, indem wir die "Select" Klausel ergänzen. Wir nehmen aus der Bestellung z.B. die Bestellnummer und das Bestelldatum. Wir nehmen die Anrede des Mitarbeiters "Hr.Text" enthält das Kürzel Herr oder Frau ist das, als Anrede, dann den "P.Vornamen", sowie den "P.Nachnamen", und ich mache jetzt einmal einen Zeilenumbruch, und vom Lieferanten wollen wir auch noch die Firmenbezeichnung "L.Firma1" und "L.Firma2". Firma 2 ist nicht eine zweite Firma, sondern sehr lange Firmenbezeichnungen werden oft auf zwei Spalten aufgeteilt. Und die Abteilungsbezeichnung wollten wir auch noch, aber die werde ich vor der Firma einfügen, also "A.TextSAbteilung". Sinnvollerweise werde ich am Ende noch eine Sortierung hier ergänzen, z.B. ich sortiere das Ganze nach der Bestellnummer. Damit haben wir unser Ergebnis hier fertig. Und ich kann diese Anweisung nun ausführen. Hier sehen wir das Ergebnis, das aus insgesamt fünf Tabellen gespeist wird. Bestellnummer und Datum kommen aus der Bestelltabelle, die Anrede aus der Tabelle Anreden, Vor- und Nachname aus der Personaltabelle, die Abteilungsbezeichnung aus der Tabelle Abteilungen, sowie Firmenbezeichnung 1 und 2 aus der Lieferantentabelle. Ganz wichtig ist es, dass die Reihenfolge der Tabellen so gewählt wird, dass das Gegenstück immer bereits vorher zum Einsatz gekommen ist. Kopieren wir uns hier die Anweisung noch einmal hin, und sehen wir uns an, was passiert, wenn ich z.B. die Abteilungen hier hinsetze bevor die Personaltabelle gejoint wird. Das heißt, ich vertausche jetzt einfach die Reihenfolge dieser zwei Zeilen, und Sie sehen schon hier, der Editor merkt schon, dass hier etwas nicht passt, und wir bekommen natürlich auch eine Fehlermeldung wenn wir das ausführen. Der Bezeichner "P.Abteilung" konnte nicht gebunden werden, das heißt er kennt diese Spalte nicht. Warum? Weil das hier sequentiell der Reihe nach abgearbeitet wird, und die Tabelle "Personal" erst anschließend hier vorkommt. Das darf nicht sein. Sie können ja ein Lasso auch nicht auf einen Pflog werfen, solange der Pflog noch gar nicht in der Erde steckt. Und das ist das einzige, was Sie berücksichtigen sollten. Wenn Sie also mehr als zwei Tabellen in einer Anweisung joinen, entscheiden Sie sich für einen Ausgangspunkt. Zu diesem Ausgangspunkt hängen Sie der Reihe nach eine Tabelle nach der anderen dazu. Entscheidend ist, dass die jeweils Partnertabelle sozusagen, das Gegenstück für die neue Tabelle vorher schon in der Anweisung enthalten ist. Dann kann eigentlich nichts mehr schief gehen.

SQL Grundkurs 1: Die Sprache erlernen

Arbeiten Sie sich in die Grundlagen der Datenbanksprache SQL am Beispiel von Microsoft SQL Server, Oracle und MySQL ein und lassen Sie sich die praktische Nutzung erklären.

14 Std. 40 min (112 Videos)
Derzeit sind keine Feedbacks vorhanden...

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!