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

MariaDB Grundkurs

Unterschiedlich strukturierte Tabellen verbinden

Testen Sie unsere 2017 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
Die Definition eines Verbundtyps dient dazu, unterschiedlich strukturierte Tabellen miteinander zu verbinden. Hierfür stehen zahlreiche verschiedene Varianten zur Auswahl.

Transkript

Bei dem nächsten Sprachkonstrukt ist die Rede vom sogenannten Verbundtyp oder auch den Join-Typen. Und hierbei geht es darum nicht Tabellen wie jetzt zu Beginn bei zum Beispiel auch des Unions, also das heißt der Vereinigung, mit gleicher Spaltenanzahl und gleichen Datentypen gleichzusetzen sondern hier können wir Tabellen verbinden, die auch unterschiedlich strukturiert sind, und es gibt ein unzählige, ja unzählig nicht, aber es gibt eine sehr große Menge von Verbundtypen, man spricht da von einem Cross-Join, von einem natural Join, Union, Semijoin, Self-Join, also Sie merken, da ist so eine ganze Menge vorhanden, ich möchte mich aber so ein bisschen auf die wichtigsten vom Verständnis her beschränken. Fangen wir gleich mit einem an, der witzigerweise fast immer sinnlose Ergebnisse liefert, aber ein wenig beschreibt, was auch bei den anderen dann hinterher geschieht. Ja und um das zu können, brauchen wir zunächst mal einen Überblick über zwei Tabellen, die uns hier interessiert, und da lassen wir uns mal eine Tabelle anzeigen, nehmen wir mal wieder das Personal, also was wir auch schon benutzt haben, das sieht so aus. Und eine Tabelle, die in der Datenbank enthalten ist, "Projekte". Und da kann man ganz klar erkennen jetzt Personal und Projekte sind nicht identisch, also haben weder identische Spaltenbezeichner, noch die selbe Anzahl an spalten. Und so eine Tabelle, die bekommen Sie mit dem ersten Verbund, dem sogenannten Cross-Join zusammengesetzt. So und ich gehe mal über die Personal-Tabelle. Schreibe dann "Cross Join Projekte", und lasse mir das Ergebnis ausgeben, und Sie sehen, er macht durchaus aus diesen Tabellen identische oder beziehungsweise eine neue Ergebnistabelle. Wenn Sie die ganze Sache andersherum eingeben, schauen wir und mal an, was dabei passiert Also "SELECT *" vom "Projekte". Und dann "CROSS JOIN personal", so, dann haben wir deutlich zu sehen eine Verschiebung, das heißt, bei der ersten Ausgabe auf der linken Seite beginnend, wird die Personaltabelle ausgegeben, Personal ID, Name, Vorname, Geburtsdatum und dann folgt die Projekte-Tabelle. Und in der zweiten Variante wird erst die Projekte-Tabelle herausgegeben, und dann die Personal-Tabelle. Wie gesagt, die Ergebnisse eines Cross Join, die sind sehr häufig nutzlos, weil er schaufelt ja jetzt hier einfach wahllos Datensätze zusammen und das Ergebnis gibt so im Grunde keinen wirklichen Sinn. Aber es verdeutlicht, wie der Join zunächst mal versucht alles zusammenzubringen, was auch selbst aus zwei unterschiedlichen Tabellen geliefert wird. Der zweite wichtige Verbundtyp und der ist wirklich wichtig, weil er auch wirklich sinnvolle Ergebnisse liefert. Das ist der sogenannte Inner Join oder Equivalant Join, und der verbindet Datensätze aus zwei Tabellen, sobald diese einen gemeinsamen Wert besitzen, also das heißt einen vergleichbaren und gemeinsamen Wert, und das macht sehr Wohl Sinn, gerade wenn wir uns jetzt die Tabelle "Projekte" und "Personal" einmal anschauen. So wie geht das, also ich hole mir zum Beispiel wieder die ersten Daten aus der Tabelle "Personal". Und die werden nun mit dem Schlüsselwort Inner Join verbunden mit der Tabelle "Projekte". Und jetzt brauchen wir eine Vergleichsklausel, das ist diesmal nicht die WHERE-Klausel, sondern hier gibt es ein Wort "ON" und jetzt muss ich angeben, aus welcher Tabelle, welche Spalte verglichen werden soll und das ist jetzt sinnig, wenn Sie mal die Tabelle ganz oben hier in der Eingabeanforderung sich anschauen, da gibt es auf der linken Seite die Tabelle "Personal" und die hat eine Personal ID, so anders ausgedrückt, die Mitarbeiternummer. Und in der Tabelle "Projekte" gibt es eine Spalte "Projektleiter". Und über den Primärschlüssel aus der Tabelle "Personal", ist die zweite Tabelle Projekte verbunden mit dem Projektleiter, das heißt, der in der Projekte angezeigten oder Projekte zugeordneten Tabelle des Personalleiters. Dieser Schlüssel verweist auf die Personal-Tabelle und dort eben auf die Personal ID, und das ist dieser ganze Beziehungsbereich, und das kann man hiermit eben wunderbar darstellen, dass ich mir jetzt aus der Projekte-Tabelle den Projektleiter hole, und das ist nämlich genau über Primär- und Fremdenschlüssel die Spalte, die dafür predisziniert ist, und wenn ich mir das abschicke, dann macht die Verbindung zweier Tabellen, die unterschiedlich strukturiert sind, durchaus Sinn. Denn jetzt, dass der Schmitz Eberhard an dem Messe-Auftritt beteiligt ist und der Kunstmann Peter am Videomarketing. Und wenn Sie natürlich jetzt nicht alle Spalten benötigen, wie jetzt macht die Spalte Projektleiter nicht wirklich Sinn, dann könnte man die zum Beispiel durch eine zusätzliche Selektion selbstverständlich filtern. Wissen Sie was, weil das sehr häufig vorkommt, machen wir das einfach mal. Und ich gebe jetzt hier einfach eine Projektion noch hinzu zu diesem Verbundtyp, und dafür muss ich nun sagen, "Personal." und dann die Spalte, um die es geht "V-Name". Und jetzt bringe ich noch etwas mit ins Spiel, weil dieser "V-Name" als Datenbankattributbezeichner, der ist jetzt nicht wirklich schön, da können Sie mit dem Wörtchen "AS" auch zum Beispiel den Begriff "Vornamen" nehmen. Sollten Sie hier Begriffe verwenden möchten mit Leerzeichen oder dergleichen, dann bitte in "Anführungsstriche" setzen. So dann gefolgt von einem Komma und ich gehe jetzt mal in die nächste Zeile, dann kann man da besser überblicken, jetzt nehme ich "Personal.Name" und der soll als Nachname dargestellt werden, und dann brauche ich aus der Tabelle "Projekte" die Bezeichnung, die mich interessiert und machen wir es mal mit einem Anführungsstrich in "Projekt - Bezeichnung, und hier muss ich auch die Anführungsstriche verwenden, weil nämlich sonst das Problem entstehen würde, dass er meint, er soll ein Attribut von einem anderen abziehen und das gibt ein Problem. So, das Ganze von der Tabelle "Personal", das kann ich in diese Zeile noch schreiben, dann nehme ich die nächste "INNER JOIN", wie vorher auch, "Projekte" und leite nun mit "ON" die Beziehung ein, beziehungsweise auch die Verbindungsüberprüfung nämlich "Personal.Personal_id= Projekte .Projektleiter". So und wenn wir das abschicken, dann bekomme ich wirklich eine sehr aussagekräftige Tabelle, natürlich mit gleichem Inhalt, weil jetzt weiß ich auch, dass der Herr Schmitz und der Herr Kunstmann A für die Messe und B für das Videomarketing zuständig ist, aber Sie sehen, wie Sie in der Kombination von Selektion, Projektion und einem Verbundtyp aus zwei völlig unterschiedlichen Tabellen, die über Primär und Foregnkey zusammengefügt sind, sinnvolle Ausgaben generieren. Bevor wir zum nächsten Verbundtyp kommen, dem sogenannten Leftouter Join, noch ein kurzer Hinweis zu dem Inner Join mit der Projektion. Genau dieses letzte Statement wird auch als sogenannter natural Join bezeichnet. Ein sehr häufig vorkommender Befehl, weil naja er wirklich sinnvolle Ausgaben, die man häufig benötigt. Aber kommen wir zum Lefrouter Join oder Left Join. Das hört sich jetzt ziemlich kompliziert an, denn mit einem Left Join wird eine sogenannte linke Inklusionsverknüpfung erstellt. Naja was meint das, nichts anderes wie, wenn Sie sich die beiden Tabellen einmal als linke und rechte Tabelle vorstellen, also die erste Tabelle ist die linke und die zweite die rechte Tabelle. Dann passiert nichts anderes, dass bei einer linken Inklusionsverknüpfung alle Datensätze aus der ersten, aus der linken Tabelle aufgelistet werden, auch wenn keine Datensätze in der zweiten dafür vorhanden sind. Und damit er ja, weil eine Tabelle nun mal immer in gleicher Zeilen- und Spaltenanzahl vorhanden sein muss, da werden diese Werte mit einem sogenannten Nall gefüllt. Ja und wie sieht der Befehl aus, wenn wir also uns die Werte der ersten linken Tabelle holen, also Personal, die Tabelle "Personal", dann gibt es das Wörtchen "LEFT JOIN", also quasi genauso geschrieben, wie auch der Verbundtyp heißt, dann "Projekte", und wieder unser Wort "ON" und jetzt müssen wir wieder vergleichen, Personal-Personal ID. Die wird verglichen mit "Projekte.Projektleiter". So. Und wenn wir das ausgeben, dann sieht man, es gibt zwei Datensätze, wo eine Zuordnung stattfinden kann und einen Datensatz, die Frau Brasbach. Da gibt es kein Projekt, also die Frau Brasbach, die hat kein Projekt. Trotzdem soll Sie mitaufgelistet werden, und ja dieser Nall-Wert, der wiederum signalisiert, dass also dort kein Gegenstück, also kein Datensatz in der Projekttabelle existiert. Jetzt könnte man den Nall-Wert ja wieder herausfiltern und hätte damit auf ziemlich komplizierte Art und Weise nichts anderes gemacht, wie den natural Join wieder nachgebildet, und da sehen Sie, das macht das ganze auch manchmal nicht ganz so einfach mit der Auswahl, welche Befehle man verwendet, denn man braucht ein bisschen Erfahrung, um dann wirklich zu verstehen, welche Ausgaben man generieren möchte und was man damit auch hinterher im Nachhinein vorhat. Und der nächste Verbundtyp, der wenn wir schon den Left Join haben, dann haben wir auch den Right Join. Und da ändere ich jetzt einfach nur das Wörtchen um, weil mehr muss man im Grunde nicht machen. Und so, scrolle bis an die Stelle. Right Join und dann lassen wir uns das mal ausgeben, und hier sieht man, da ist so eine kleine Innenkonsistenz in MariaDB, denn normalerweise müsste jetzt in der Form, ja auch ein Nallwert vorhanden sein, das ist es aber nicht, weil wir die falschen Tabellenkombinationen haben, also hier geht´s wirklich um links und um rechts. Das heißt um hier wieder eine Sinnvolle Ausgabe zu bekommen, müsste man das so schreiben, "SELECT* FROM Projekte". Und dann den Right Join, von Personal, "ON projekte.Projektleiter= Personal.Personal ID". So und wenn wir das abschicken, dann sehen wir, haben wir jetzt auf der linken Seite den Nallwert stehen, da wird jetzt auch ein Schuh draus, also es gilt halt immer nur darum, dass man die trotzdem anzeigen lassen möchte, die jetzt in der linken oder in der rechten Tabelle stehen, auch wenn in der linken oder rechten Tabelle je nach Left oder Right Join keine Gegenstücke existieren. Die weiteren Verbundtypen, die es jetzt noch gibt, wie eben den Fullouter Join, oder den Union Join, Semijoin, das sind alles Verbundtypen, die auch durchaus sinnvoll eingesetzt werden können, sonst gebe es sie nicht, die aber nur unter ganz bestimmten ja Verwendungen auch wirklich Sinn ergeben, und ich denke mal, Sie haben jetzt mit den Verbundtypen, die ich Ihnen aufgezeigt habe, schon genügend zu tun, das wir es dabei erst einmal belassen, denn im Grunde können Sie nun wirklich aus allen Tabellen, aus jeder Datenbank, sinnvolle Informationen generieren, mit der Selektion, der Projektion, den Schnittmengen, den Differenzen und eben auch dem besagten Verbundtypen.

MariaDB Grundkurs

Sehen Sie, wie Sie den populären Datenbankserver einrichten und für erste eigene Projekte nutzen.

4 Std. 41 min (44 Videos)
Derzeit sind keine Feedbacks vorhanden...
 
Software:
MariaDB MariaDB 10.1
Exklusiv für Abo-Kunden
Erscheinungsdatum:29.03.2016
Aktualisiert am:08.05.2017

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!