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

SQL Grundkurs 2: Aufgaben und Lösungen

Beispiel 18: INNER JOIN

Testen Sie unsere 2019 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
Geben Sie eine Liste aller Mitarbeiter und Mitarbeiterinnen mit der Abteilung aus. Neben dem Vor- und Nachnamen und dem akademischen Grad sollen die Bezeichnung der Abteilung und das Eintrittsdatum sortiert ausgegeben werden.

Transkript

Mit diesem Beispiel beginnen wir nun, mehr als eine Tabelle zu verwenden. Wir werden also mehrere Tabellen miteinander joinen, oder verknüpfen wie man im Deutschen sagt. Wir möchten folgende Liste erzeugen. Aus der Personaltabelle wollen wir den Nachnamen, Vornamen und den akademischen Grad anzeigen, sodern es einen gibt und aus der Tabelle "abteilungen" den gejointen Namen der Abteilung, z. B. hier Controlling, Einkauf, Finanzbuchhaltung. In der Tabelle "personal" selber, finden wir ja nur das Kürzel. Der Fremdschlüssel aus der Tabelle "personal" trägt den Namen "abtlg", und der verweist auf den Primärschlüssel der Tabelle "abteilungen" auf die Abteilungsnummer. Zusätzlich möchten wir noch das Eintrittsdatum ausgeben, und das Ergebnis nach dem Abteilungsnamen und dem Eintrittsdatum aufsteigend sortieren. Wenn Sie noch zusätzliche Herausforderungen benötigen, können Sie das Ergebnis in einer zweiten Variante noch optisch verfeinern. Sie können hier diese drei Nachnamen, Vornamen und akademischen Grad zu einer einzigen Spalte zusammenfassen. Außerdem dann einen schönen Aliasnamen, Mitarbeiter oder Mitarbeiterin vergeben. Sonst die Abteilung und das Eintrittsdatum bleiben gleich aber auch hier beim Eintrittsdatum, habe ich in der zweiten Variante dafür gesorgt, dass hier sauber das Datum formatiert ausgegeben wird. 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. Ich bin überzeugt, dieses Beispiel hat für Sie keine Probleme verursacht. Betrachten wir uns mögliche Lösungen. In der ersten Variante haben wir gesagt, möchten wir einfach einmal nur den JOIN umsetzen. Ich habe hier den JOIN mit der Tabelle "personal" begonnen und was jetzt hier zu tragen kommt, ich habe gleich einen Aliasnamen für diese Tabelle vergeben. Es macht hier Sinn wenn man mehrere Tabellen verwendet, bei jeder Spalte anzugeben, aus welcher Tabelle sie stammt. Das könnte man jetzt mit dem ursprünglichen Tabellennamen machen, das würde aber bei langen Tabellen- und Chambernamen sehr unförmige, sehr aufwendige SELECT-Statements produzieren. Um das Ganze einfach und übersichtlich zu halten, vergeben wir deshalb hier einen Aliasnamen, der direkt hinter den Tabellennamen gesetzt wird. Und diesen, mit Punkt getrennt, ergänzen wir vor den einzelnen Spaltennamen. Aufgepasst. Immer dann, wenn es gleiche Namen in mehreren Tabellen gibt, müssen Sie das unbedingt tun. In allen anderen Fällen können Sie es tun, oder man könnte auch sagen, sollten Sie es tun, aber bei Namensgleichheit müssen Sie es tun. Gefolgt mit der Join-Anweisung INNER JOIN. Auch hier könnten Sie das Schlüsselwort "INNER" weglassen, und nur JOIN schreiben, wenn Sie das lieber möchten, kommt der zweite Tabellenname, in unserem Fall "wawi.abteilungen". Diesem habe ich den Aliasnamen "a" gegeben. Hinter dem Schlüsselwort ON kommt die Join-Bedingung. In dem Fall, dass die Inhalte aus Fremdschlüsseln der einen und Primärschlüssel aus der anderen Tabelle ident sind. also "p.abtlg = a.abtnr". Die Reihenfolge, die Sie hier verwenden spielt keine Rolle. Sie könnten das auch umdrehen und "a.abtnr = p.abtlg" schreiben. Wie gefordert habe ich die Sortierung Über die Spalten "abteilung", das ist zugleich der Aliasname für die Spalte "a.text" aus der Abteilungstabelle, und mit "p.eintritt" vorgenommen. Das heißt im Ergebnis haben wir zuerst aufsteigend nach Abteilung sortiert, und innerhalb der Abteilung, aufsteigend nach dem Eintrittsdatum. Sehr ähnlich ist die zweite Variante, also wenn Sie die fortgeschrittene Variante auch gelöst haben, dann könnte die Lösung derart aussehen. Um diese drei Spalten zusammenzufassen habe ich den akademischen Grad, den Vornamen und den Nachnamen jeweils mit kaufmännischen Plus beim Microsoft SQL Server zusammengefügt dazwischen jeweils ein Leerzeichen, das als fixer Text unter einfache Hochkomma gesetzt werden muss. Ein Problem könnte sich ergeben, wenn der akademische Grad nicht vergeben ist. Denn wenn ich in einem Ausdruck einen NULL-Wert verwende, würde der Rest "mitgefressen" werden. Das würde bedeuten, dass alle die, die keinen akademischen Grad haben, in der Spalte Mitarbeiter ein NULL im Ergebnis hätten. Damit das nicht passiert, verwenden wir die ISNULL-Funktion. und ersetzen diesen Teilausdruck den akademischen Grad plus dem Leerzeichen das hier dazwischen zu stehe kommen soll, durch einen Leer-String. Dadurch, dass wir den Teilstring hier ersetzen, und nicht den akademischen Grad allein, haben wir den Vorteil, das automatisch Leerzeichen verschwinden am Beginn, sollte es keinen akademischen Grad geben. Da wir den Aliasnamen mit Sonderzeichen in Form von Klammern versehen haben, müssen wir in den ANSI SQL unter doppelte Hochkomma setzen, damit das zu keinem Fehler führt. und um das Eintrittsdatum abschließend noch in deutscher Formatierung auszugeben, verwende ich hier die Formatfunktion, die ab dem SQL Server 2012 zur Verfügung steht, definiere ein Datum ud über den Culture-Parameter "de-de" das deutsche Format. Wichtig ist, dass wir darauf achten, dass wir nicht nach dem Aliasnamen sortieren, weil das ist nun ein Text. Fürs Sortieren müssen wir den ursprünglichen Datumswert hernehmen. Um also zwei Tabellen mittels INNER JOIN verwenden wir den ersten Tabellennamen, und hinter dem Join-Ausdruck den zweiten. Hinter dem Schlüsselwort ON ergänzen wir die JOIN-Bedingung Typischer weise finden wir hier Fremd- und Primärschlüssel an, sofern es eine Beziehung zwischen den zu joinenden Tabellen gibt. Betrachten wir nun zum Abschluss noch die Ergebnisse mit Oracle und MySQL. Bei Oracle und MySQL ergibt sich kein Unterschied in der ersten Lösungsvariante. Da hier nur ANSI-konforme Elemente enthalten sind. führt das zu keiner unterschiedlichen Lösung. Kleine Unterschiede gibt es in den zwei Ausdrücken. Einerseites finden wir hier den Nachnamen mit Vornamen und akademischen Grad zusammengefasst. Die doppelte Pipe als Konkatenierungsoperator bei Oracle schluckt ja NULL-Werte, d. h. wir können den akademischen Grad den Vornamen und den Nachnamen, mit den Leerzeichen dazwischen direkt zusammen fügen. Und die Namen verschwinden nicht, wenn es keinen akademischen Grad gibt. Allerdings haben wir am Beginn ein Leerzeichen bei all denen, die keinen akademischen Grad haben, und den schneiden wir mit der Glätten-, mit der TRIM-Funktion ab. Um das Datum deutsch formatiert auszugeben verwenden wir die Funktion TO_CHARACTER Um mit dem hier angegebenen Format eine Konvertierung vorzunehmen. Und wenn wir diese Anweisung ausführen, sehen wir hier das Ergebnis wie schon vorhin. Und dasselbe auch unter MySQL. Auch hier gibt es keinen Unterschied, In der ersten Variante alles ANSI-konform, bei der zweiten Variante müssen wir die CONCAT-Funktion verwenden, um mehrere Elemente, jeweils mit Komma getrennt, zusammenzufügen. Um den NULL-Wert für den akademischen Grad zu eliminieren, müssen wir mit der IFNULL-Funktion diese zwei, also den akademischen Grad und das nachfolgende Leerzeichen zusammenfügen und dann mit der IFNULL-Funktion mit einem Leer-String ersetzen, analog wie beim SQL Server. Und auch hier verwenden wir eine Funktion, z. B. DATE_FORMAT, um das Datum in unserer gewünschten Formatierung auszugeben. betrachten wir uns das Ergebnis, und auch hier bekommen wir es so wie gefordert.

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!