Am 22. Juli 2017 haben wir überarbeitete Fassungen unserer Datenschutzrichtlinie, sowie eine Cookie-Richtlinie veröffentlicht. Wenn Sie video2brain.com weiterhin nutzen, erklären Sie sich mit diesen überarbeiteten Dokumenten einverstanden. Bitte lesen Sie diese deshalb sorgfältig durch.

PostgreSQL Grundkurs

Unterschiedlich strukturierte Tabellen verbinden

Testen Sie unsere 2015 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 Varianten zur Auswahl.

Transkript

Bei den nächsten Sprachkonstrukten ist die Rede von so genannten Verbundtypen. Hier geht es darum, Tabellen mit unterschiedlichen Strukturen zu verbinden. Und die Auswahl dieser Verbundtypen ist ziemlich umfangreich. Man spricht von Crossjoin, Naturaljoin, Union, Semi, Selfjoin. Also, all das sind Begriffe für die unterschiedlichen Verbundtypen. Schauen wir uns den ersten einmal an. Den "einfachen Crossjoin". Der gibt jetzt hier in diesem Beispiel tatsächlich ein absolut sinnloses Ergebnis aus. Er zeigt aber auf, was er eigentlich macht, und deswegen verwende ich ihn jetzt mal, hier an der Stelle. Ich gebe mir alle Attribute, alle Spalten aus der Tabelle "Personal", oder ich greife mir die, und verbinde die eben über den Verbund, über ein solches Kreuzprodukt, mit der Tabelle "Projekt". Ich lass mir das einfach mal ausgeben, so. Und wenn man sich das ausgibt, dann sieht man, wird nun aus der Tabelle "Personal", die aus insgesamt vier Spalten besteht, und der Tabelle "Projekt", die aus drei Spalten besteht, eine neue Ausgabetabelle generiert. Damit noch nicht genug, sondern jetzt wird auch tatsächlich jeder Datensatz kreuzmäßig miteinander in Verbindung gebracht. Die Ausgabemenge, die dabei jetzt natürlich entsteht, ist jetzt in diesem speziellen Beispiel alles andere als sinnvoll. Weil ich hab da zwei mal Brasbach, Susanne drin stehen, die steht in irgend einer Verbindung mit dem Messeauftritt und Videomarketing, obwohl die tatsächlich gar nichts damit zu tun hat. Denn es gibt keinen Projektleiter, der mit der Nummer Eins in der Tabelle "Projekt" definiert ist. Aber mir ging es zunächst einmal darum, dass Sie sehen, dass der Crossjoint einfach die Aufgabe erfüllt, aus zwei Tabellen unterschiedlicher Strukturen und unterschiedlichem Aufbau und mit unterschiedlichen Datensätzen tatsächlich eine komplette Ausgabetabelle zu generieren. Dreht man das Ganze einmal um, Select Sternchen, from Projekt, Crossjoin "Personal", dann sieht man, hab' ich das Gleiche wieder, aber jetzt wird das Ganze umgedreht. Das ist schon mal ein Hinweis darauf, was später als Verbundtyp kommt, nämlich die Bedeutung, welche Tabelle auf der linken und welche Tabelle auf der rechten Seite steht. Geben wir uns jetzt den ersten wirklich sinnvollen Verbundtyp einmal aus. Und die Rede dabei ist von dem sogenannten Innerjoin, oder Equivalent-Join. Der Aufbau ist im Grunde der gleiche. Ich gebe mit Select Sternchen, from Personal, erlaube ich mir den Zugriff auf die Tabelle "Personal", und jetzt heißt der Befehl "Innerjoin" auf die Tabelle "Projekt". Jetzt kommt ein Wörtchen, mit "On" dazu, wo ich über dieses Schlüsselwort die Möglichkeit habe, wieder ein Kriterium zu definieren, dass mir gleiche Datensätze herausfiltert. Also das heißt, das brauche ich eigentlich um eine sinnvolle Verknüpfung miteinander zu bekommen. Und hier wähle ich mir mal aus, dass ich aus der Tabelle "Personal" die Personal-ID mit der Projektleiter-ID aus der Tabelle "Projekt" verknüpfen will. "Projektleiter". Bevor ich das abschicke, schauen wir uns das mal an. Auch wenn das jetzt hier nicht sinnvoll ist, aber wir sehen, dass eine Verbindung dieser Tabellen in vielen, vielen Fällen ja über die so genannten Schlüsselwerte stattfindet. Und diese Schlüsselwerte, die verknüpfen quasi Datensätze aus unterschiedlichen Tabellen miteinander. Jetzt haben wir aber nicht wie in den vorherigen Bereichen, häufig die Möglichkeit, dass der Aufbau dieser Tabellen immer identisch ist, sondern ich muss wirklich unterschiedliche Tabellenstrukturen miteinander verbinden können. Und das geschieht hier, und zwar anders ausgedrückt, das was ich mir jetzt hier ausgeben lasse, ist nichts anderes, wie "Bitte gib mir alle Mitarbeiter aus, die ein Projekt betreuen". Wenn ich das abschicke, dann sieht man, bekomme ich auch jetzt die Kombination, er versucht also aus beiden Tabellen eine zu machen. Durch diesen "On"-Bereich aber, jetzt mit einem sinnvollen Ausgabeergebnis. Und theoretisch gesehen kann man sowas auch mit dem Crossjoint natürlich machen, also der ist nicht vollkommen sinnlos. Nur hab ich da natürlich dann etwas anderen Strukturen. Aber, man sieht jetzt, dass ich also tatsächlich die Information bekommen. Der Schmitz, Eberhard, der für den Messeauftritt zuständig ist, und von dem Kunstmann, Peter, der für das Videomarketing zuständig ist. Nachteil, jetzt habe ich eine sehr große und lange Tabelle. Und mit doppelten Informationen, die ich nicht benötige. Da hilft uns wieder jetzt die Kombination von all den Dingen, die wir bereits kennengelernt haben. Nämlich die Verwendung der Projektion, und zum Beispiel auch die Möglichkeit, Attribute neu zu benennen. Und das fange ich mal an. Ich hole mir also aus der Tabelle "Personal" den Vornamen. Und den möchte ich aber als Vorname ausgegeben haben. Dann kommt das Komma, für die nächste Spalte. Ich wechsel jetzt in die nächste Zeile, damit es ein bischen übersichtlicher bleibt, und sage dann, aus der Tabelle "Personal" möchte ich jetzt den Namen haben, und der soll bitte als Nachname angegeben werden. Und jetzt reicht mir das aus meiner Mitarbeiter-Tabelle, mehr brauche ich ja nicht. Jetzt möchte ich aus der Tabelle "Projekt" die "Projektbezeichnung" haben, und das Ganze soll dann auch als "Projektbezeichnung" ausgegeben werden. Das im Großen und Ganzen war's dann schon. Denn jetzt muss ich ihm sagen, OK, von der Tabelle "Personal", also vom Personal, und darauf bitte ein Innerjoin abbilden, also einen Verbundtyp, auf die Tabelle "Projekt". Mit der Gleichheitsbedingung, also mit der Auswahlbedingung "Personal" Punkt "Personal-ID". Und die muss identisch sein, aus der Tabelle "Projekt", mit der Verbindung "Projektleiter". So, und wenn ich jetzt keinen Tippfehler habe, das ist nicht die Projektbezeichnung, sondern es ist die Bezeichnung, das habe ich doppelt dort drin, also muss ich ganz zurück. Also Sie sehen, ich habs jetzt auch mal drin gelassen, weil das passiert durchaus, wenn man das ganze so per Hand eingibt, und wenn ich das ganze jetzt ausgebe, Sie sehen, dann habe ich auch das richtige Ergebnis. Also, das ist kein Problem, wenn so etwas passiert, und scheuen Sie sich auch nicht, dann wirklich zu kontrollieren, was ist hier schief gelaufen? Das ist einfach Übungssache, dann zu erkennnen, wo Fehler drin liegen. Und der Verweis sei mir gestattet, wenn Sie jetzt zum Beispiel eine Weblösung programmieren, innerhalb eines PHP-Scriptes, und Sie verwenden dann solche SQL Statements, die dann fehlerhaft, oder nicht ausgeführt werden, dann hilft Ihnen häufig, bei PHP nichts weiter. Sie kriegen einfach keine Ergebnismenge. Wenn man das dann gerade mal zum Beispiel im eigenen Datenbankserver ausprobieren kann, man sieht dann, Ah Moment mal, hier habe ich einen logischen Fehler, oder einen Tippfehler, oder was immer drin, das wäre hilfreich. Zurück zu unserem Innerjoin, oder genau genommen jetzt auch dem Natural join, so wird das nämlich bezeichnet, wo wir diese ausführliche Ausgabe jetzt gemacht haben, und wenn Sie sich diese Tabelle einmal anschauen, dann ist die sehr aussagekräftig. Ich habe alle Mitarbeiter, die mit einem Projekt, Messeauftritt, oder beziehungsweise einem Projekt Videomarketing beschäftigt sind. Und das ist der Vorname, Nachname Eberhard Schmitz und der Peter Kunstmann, mit der Projektbezeichnung, die ich gerade genannt habe. Das macht nochmal deutlich, wie wirklich leistungsstark diese Befehle sind. Und lassen Sie und nun abschließend noch zwei Join-Typen dazu nehmen, nämlich den Left- und den Right (Outer) -Join, so wird er auch häufig bezeichnet. Kucken wir uns einfach an, was er macht. Der Befehl ist genauso aufgebaut, Select Sternchen von Personal, Left-Join und Projekt, ich muss also immer die Tabelle angeben, und dann merkt man schon, hier ist der Bezug auf die linke Seite einer Tabellenkombination bezogen. So und das Ganze wird dann eben wieder verknüpft, mit Personal und Personal-ID, sowie Projekt Punkt Projektleiter. So, das gebe ich einmal aus. Und jetzt fällt auf, dass wir hier eine Ausgabe haben, die auf der rechten Seite leer ist, deswegen Linke-Inklusionsverknüpfung. So sagt man auch dazu. Also "The left Outer Join", oder "Left Join" kurz. Dieses Ergebnis bekomme ich, wenn ich im Vorfeld definiert habe, ich brauche alle Mitarbeiter, und ich möchte jetzt zum Beispiel auch die haben, die kein Projekt haben. Und der Bereich, den wir hier rechts sehen, mit den Feldern, die leer sind, da muss man jetzt wissen, die sind nicht leer in Form von einer leeren Zeichenkette, sondern da ist wieder wirklich ein definierter Typ drin, der ist "Null". Dieser typ "Null", den kann ich dann auch weiter führen, natürlich abfragen, und somit dann auch wieder auf andere Informationen kommen. So, jetzt drehen wir das Ganze um, ich rufe einfach den gleichen Befehl noch einmal auf, und wenn es eine linke Inklusionsverknüpfung gibt, dann gibt es auch eine rechte, und die ist nur durch ändern des Schlüsselwörtchens aufrufbar. Und wenn wir uns das anschauen, dann bekomme ich jetzt wieder nur die beiden quasi, die mit einem Messeauftritt betraut sind, also es ist fast fast das Gleiche, was wir vorher schon bei den Natural, oder bei dem Inner-Join gehabt haben. und das kann ich natürlich jetzt hier genauso wieder kombinieren, mit der Projektion etc cetera. An der Stelle möchte ich das Ganze belassen. Sie haben mit diesen SQL-Statements aus der relationalen Datenbank-Algebra sicherlich jetzt schon genug Stoff, viele eigene Dinge auszuprobieren. Und es fällt, oder ist hoffentlich aufgefallen, dass nicht jedes Ergebnis logisch sein kann, obwohl Sie da was stehen haben. Ebenso, wie jetzt heir abschließend bei den letzten Beispielen wird auch deutlich, dass Sie ein und denselben Befehl auf unterschiedliche Art und Weise umsetzen können. Also einmal mit einem Innerjoin, das nächste mal dann mit einem Right-Join. Ganz häufig ist es aber persönliche Vorliebe mit was man am Liebsten arbeitet, welcher Konstrukt einem am Logischsten erscheint. Und wichtig ist es auch, bei der Beurteilung, wenn Sie also entscheiden müssen, welche Vorgehensweise ist die bessere, da kann man nicht pauschal sagen, das ist der einzig richtige Befehl, es gibt also viele Alternativen. Für die Zukunft schon mal der Hinweis, je nach Ausführung dieser Vebundtypen, hat es aber auch etwas mit der Performance zu tun. Nicht jeder Verbundtyp ist tatsächlich gleich gut, auch wenn sie das gleiche Ergebnis liefert. Und das ist aber fortgeschrittener Stoff und sollte man sich dann auch erst beschäftigen, wenn man diese ganzen Verbundtypen wirklich beherrscht. Zumindestens hier in den Grundlagen auch kennen gelernt hat. mit der Sammlung von der einfachen Selektion, über die Projektion, bis hin zu den Verbundtypen, haben Sie jetzt alle SQL-Befehle an der Hand, die Sie benötigen, um Ihre Datenbank-Projekte, Ihre Applikationsprojekte, Ihre Webprojekte, umzusetzen. Und das mit Hilfe von PostSQL. Ich denke, da gibts einiges, was man jetzt üben kann, und hoffentlich, und ich bin sicher, dass Ihnen die Beispiele dazu ein wenig weiter helfen. Und wenn Sie tiefer in die Materie einsteigen möchten, dann kann ich Ihnen wirklich nur Literatur empfehlen, zum Thema Datenbank-Algebra, In Form von SQL-Statements. Das finden Sie nicht nur in Form von Büchern, sondern natürlich auch im Netzt, dort gibt es jede Menge Beispiele, und auch in der Dokumentation selbstverständlich, von PostSQL.

PostgreSQL Grundkurs

Lernen Sie, wie Sie PostgreSQL in Ihr System integrieren und Datenbanken, Tabellen und Datensätze anlegen und verwalten können.

2 Std. 53 min (28 Videos)
Derzeit sind keine Feedbacks vorhanden...
 
Software:
Exklusiv für Abo-Kunden
Erscheinungsdatum:26.01.2017
Aktualisiert am:15.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!