Am 14. September 2017 haben wir eine überarbeitete Fassung unserer Datenschutzrichtlinie veröffentlicht. Wenn Sie video2brain.com weiterhin nutzen, erklären Sie sich mit diesem überarbeiteten Dokument einverstanden. Bitte lesen Sie es deshalb sorgfältig durch.

Grundlagen der Programmierung: Datenbanken

Abfragen über mehrere Tabellen erstellen

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Eine Abfrage kann ebenfalls Informationen aus mehreren verschiedenen Tabellen liefern. Hierfür müssen diese zunächst miteinander verknüpft und eine entsprechende Abfrage definiert werden.

Transkript

Nach einiger Zeit werden Sie feststellen, dass eine einfach gestrickte SQL-Anweisung mit denen Sie lediglich Daten aus einer einzigen Tabelle auswählen, einen recht begrenzten Nutzen hat. Ich möchte also eine SQL-Abfrage haben, die nicht nur auf das Auswählen aus einer Tabelle beschränkt ist, sondern in der Lage ist aus zwei verschiedenen Tabellen, oder sogar aus drei oder mehr Tabellen auszuwählen. Wir sprechen hier vom Verknüpfen unserer Tabellen. Im Beispiel, dass ich jetzt durchgehe, haben wir eine Tabelle "Employee" und eine Tabelle "Department". Es gibt eine eins zu viele Beziehung zwischen "Department" und "Employee", die über die "DepartmentID" Spalte eingerichtet ist. "DepartmentID" ist ein Fremdschlüssel und "Employee" ist ein Primärschlüssel in "Department". Es stellt sich nun die Frage, wie verknüpfen wir diese beiden Tabellen in SQL? Beginnen wir mit einer recht einfachen SQL-Anweisung. Ich wähle einige Spalten aus der Mitarbeitertabelle aus: "FirstName", "LastName", "HireDate" und "DepartmentID". Das geschieht genauso wie wir das schon mehrmals gemacht haben. In den Ergebnissen sind wie erwartet keinerlei Überraschungen vorhanden. Um die andere Tabelle jetzt einzubeziehen, verwenden wir hier das Schlüsselwort JOIN. Nach der Tabelle "Employee" gebe ich nun das Wort JOIN an und sage "Department", also "FROM Employee JOIN Department". Damit haben wir an sich noch nicht so viel gewonnen, aber wir werden jetzt die erforderlichen Teile nach und nach hinzufügen. Wenn ich jetzt also sage ich möchte diese beiden Tabellen miteinander verknüpfen, dann kann ich natürlich die Spalten aus der rechten "Department" Tabelle jetzt in die SELECT-Klausel einfügen. Somit schreibe ich nach "DepartmentID" den Namen und den Ort, also die "Location" aus dem "Department" hinein. Doch sofort haben wir hier ein Problem. Wenn ich es von zwei verschiedenen Tabellen auswähle, dann ist es durchaus normal, dass es einen Namenskonflikt gibt. In diesem Fall macht uns hier die "DepartmentID" Schwierigkeiten, weil die "DepartmentID" sowohl in der "Employee" Tabelle, als auch in der "Department" Tabelle als Spalte existiert. Die SQL-Anweisung wäre jetzt also recht verwirrend. Wovon spreche ich überhaupt? Und in diesem Fall könnte ich einfach den Namen der Tabelle als Präfix angeben, wobei es eigentlich keine Rolle spielt welche von beiden Tabellen in dem Fall ich nehme. Doch wir müssen es in SQL explizit angeben. Wenn ich jetzt meine SQL-Anweisung hier sehr explizit ausdrücken möchte, dann könnte ich das sogar für jede einzelne Spalte tun, also ich könnte schreiben "Select Employee.FirstName, Employee.LastName, Employee.HireDate" und so weiter, aber dann ist es ein bisschen schwer zu lesen und es ist nicht unbedingt notwendig. Diese Abfrage hier, die kann ich immer noch nicht ausführen, weil ich noch genau beschreiben muss, wie diese Tabellen miteinander zu verknüpfen sind. Und hierfür verwende ich das Schlüsselwort ON und zwar in der Verbindung mit JOIN. Somit heißt es "Employee JOIN Department ON Employee.DepartmentID = Department.DepartmentID" Wir haben nun damit beschrieben, wie diese Verknüpfung stattfindet. Wenn ich diese Anweisung ausführe, erhalte ich meine Ergebnisse zurück, die diese beiden Tabellen miteinander kombinieren, das heißt verknüpfen. Und ein wichtiger Punkt hier ist die Art der Verknüpfung, die wir momentan ausführen. Sie liefert uns nur die Zeilen zurück, in denen eine Übereinstimmung zwischen den beiden Tabellen besteht. In der "Employee" Tabelle finden Sie in der dritten Zeile die Mitarbeiterin "Alice Bailey". Nun hat Alice in the "DepartmentID" Spalte den Wert Null, demnach ist Sie nicht mit irgendeinem Department verknüpft. Wenn wir also nun diese Verknüpfung ausführen, dann bekommen wir keine Zeile für "Alice Bailey" zurück, weil eben keine Übereinstimmung mit Department existiert. Und das hängt damit zusammen, dass wir hier einen JOIN oder besser gesagt einen INNER JOIN ausführen. Ich habe hier bisher nur das Schlüsselwort JOIN verwendet, aber wenn ich alles ganz korrekt machen will, was bei mir normalerweise der Fall ist, dann sollte ich die Wörter INNER JOIN statt JOIN verwenden, selbst wenn JOIN standardmäßig diesen INNER JOIN darstellt. Das heißt, bringe mir nur die Zeilen zurück, für die es eine Übereinstimmung in beiden Tabellen gibt. Somit sehen wir weder die Zeile "Alice Bailey", weil die keine "DepartmentID" hat, noch irgendwelche Zeilen aus der "Department" Tabelle für die es keine übereinstimmenden Mitarbeiter gibt, wie rechts bei "Department". Die erste Zeile "DepartmentID 1" hat keine Mitarbeiter in der linken Tabelle. Doch manchmal möchte man diese anderen Zeilen, die keine exakte Übereinstimmung haben, explizit einbeziehen. Dazu erstellt man ein sogenanntes "LEFT OUTER JOIN", zusammengefasst "OUTER JOIN". Ein solcher OUTER JOIN heißt, wir greifen eine der Tabellen heraus und sagen, dass diese den Vorrang hat. Wir wollen also alle Zeilen aus dieser bestimmten Tabelle sehen und trotzdem die übereinstimmenden Daten anzeigen, wo es irgend möglich ist. Da sich dies etwas verwirrend anhören mag, will ich demonstrieren worin der Unterschied liegt. Anstatt die Schlüsselwörter INNER JOIN zu verwenden, nehme ich jetzt OUTER JOIN, aber ich kann nicht einfach nur OUTER JOIN schreiben, sondern ich muss ziemlich genau sein. Mit einem OUTER JOIN sagt man ja, dass eine dieser beiden Tabellen Vorrang gegenüber der anderen hat. Wir sind also daran interessiert, wo sie übereinstimmen, möchten aber trotzdem die Ergebnisse haben, wenn es die Übereinstimmung mal nicht gibt. In der Regel verwende ich hier das Wort LEFT, beziehungsweise RIGHT, und schreibe eben LEFT OUTER JOIN oder RIGHT OUTER JOIN. Das LEFT und RIGHT bedeutet hier lediglich, dass die Tabelle auf der entsprechenden Seite Vorrang hat gegenüber der anderen Seite. Hier verwende ich jetzt also ein LEFT OUTER JOIN und die Anweisung auf der linken Seite des Wortes JOIN schaut nach, dass die Tabelle §Employee§ den Vorrang hat. Wir erhalten hier nun sehr ähnliche Ergebnisse zurück, wie gerade eben. Wir bekommen noch eine Zeile für "Alice Bailey", selbst wenn "Alice Bailey" nicht mit einer Zeile in "Department" verknüpft ist. Wir erhalten diese Zeile trotzdem zurück. Das Ergebnis liefert null-Werte, weil nichts da ist, was ich dort hin schreiben könnte für "Name" und "Location". Umgekehrt kann ich statt einer LEFT OUTER JOIN auch eine RIGHT OUTER JOIN Formulierung verwenden und damit lege ich den Fokus eben auf die "Department" Tabelle und sage ich möchte alle Übereinstimmungen haben, auch alles in der "Department" Tabelle für Departments, für die es keine Mitarbeiter gibt. In diesem Fall erhalten wir also auch eine Zeile zurück für die "DepartmentID 1" und da sind dann als Mitarbeiter immer nur Nulls angegeben, also keinen Nuller, sondern die englische Version Null, für "kein Wert", der dort eingetragen ist. Es gibt sogar noch einen FULL OUTER JOIN der beides erledigt. Das können Sie sich vorstellen, dass wir dann Zeilen aus beiden Tabellen zusätzlich zurückgeliefert bekommen, aber aus Platzgründen verzichte ich jetzt hier darauf das nochmal im Detail darzustellen.

Grundlagen der Programmierung: Datenbanken

Fangen Sie ganz von vorne an und erfahren Sie alles über die Grundlagen zu Datenbanken und deren Einsatzzwecke, um danach eigene Lösungen und Anwendungen zu entwickeln.

3 Std. 6 min (39 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!