SQL Grundkurs 2: Aufgaben und Lösungen

Beispiel 24: Inline View

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Welche Mitarbeiter sind jünger als der Durchschnitt ihrer Abteilung?

Transkript

In diesem Film nehmen wir uns ein Beispiel vor, in dem wir eine Inline-View benötigen. Eine Inline-View ist eine Unterabfrage, die man in der FROM-Klausel mit einem JOIN z. B. verwendet. Vielleicht erinnern Sie sich noch an das Beispiel 15: Welchse Mitarbeiter sind jünger als der Durchschnitt ihrer Abteilung? In diesem Fall haben wir das etwas anders gelöst und diesmal wollen wir alternativ einen JOIN mit einer Unterabfrage einsetzen. Der Vorteil dieser Variante ist, dass wir zwar prinzipiell dasselbe Ergebnis bekommen wie wir es schon beim Beispiel 15 hatten, aber wir haben nur darstellen können ... da wir ja das Durchschnittsalter nicht in der FROM-Klausel, sondern in der OR-Klausel berechnet haben ... wer ist jünger als das Durchschnittsalter, aber konnten das Durchschnittsalter nicht anzeigen. Wenn wir die Variante jetzt mit der Inline-View verwenden, haben wir den Vorteil, dass wir zusätzlich das Durchschnittsalter auch anzeigen können, d. h. wir sehen nicht nur, dass z. B. der Bernhard Holzmann, mit deinem Alter von heute "32", jünger ist als das Durchschnittsalter, sondern auch genau, dass das Durchschnittsalter im Moment "36,5" beträgt. Und wenn wir schon beim Joinen sind, dann können wir auch gleich, anstelle des Abteilungskürzels, hier die Abteilungstabelle dazujoinen. Dann können wir den Namen der Abteilung anzeigen, das macht das Ergebnis noch etwas schöner. Das heißt, was wir bekommen wollen ist die Zeichnung der Abteilung, den Vornamen und den Nachnamen, das schön formatierte, so wie wir es im Beispiel 15 schon gemacht haben, Geburtsdatum, das Alter und das Durchschnittsalter. Dazu müssen wir das Durchschnittsalter je Abteilung in einer Unterabfrage erzeugen, und diese dann mit den andren Tabellen, nämlich "PERSONAL" und "ABTEILUNG" joinen. 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. Wir starten nun unseren Vergleichsdurchgang hier mit Oracle. Wir haben ja bereits kennengelernt, dass wir mit der TRUNC-Funktion das Durchschnittsalter berechnen können. Und das Ganze habe ich jetzt hier in eine Unterabfrage gepackt, in der ich nach Abteilung gruppiere und das durchschnittliche Alter, das Durchschnittalter für diese Abteilung bilde. Ich habe jetzt hier, damit wir das besser sehen können, genau den Teil der Unterabfrage markiert. Sie sehen, die Unterabfrage ist hier auch in Klammern gesetzt Und mit einem Tabellen-Aliasnamen versehen. Damit können wir danach sauber darauf zugreifen. Außerdem sehen wir jetzt hier den JOIN. Ich habe hier mit der Personaltabelle begonnen, habe mit einem INNER JOIN die Abteilungen über die Abteilungsnummer gejoint und als zweiten INNER JOIN nun diese Inline-View, diese Unterabfrage verwendet. Und ganz normal dahinter die JOIN-Bedingung und zwar über die Abteilung. Die Abteilung, nach der habe ich hier in der Unterabfrage gruppiert, "d.abtlg" ist die Abteilung aus dieser Unterabfrage und "p.abtlg" ist die Abteilung aus der Personaltabelle. Um nun nur jene anzuzeigen, die jünger sind als das Durchschnittsalter, habe ich in der WHERE-Klausel ... ähnlich wie schon beim anderen Beispiel ... wieder das Alter berechnet und gesagt, das muss jetzt kleiner sein als das "d.durchschnittsalter". Und damit verweise ich jetzt auf diesen Berechnungsausdruck, der sich hinter dem Aliasnamen in meiner Unterabfrage "d" wie Durchschnitt bezieht. Damit spare ich mir jetzt hier noch einmal den Ausdruck hier zu verwenden. Und ich sortiere das Ganze nach Abteilung und Geburtsdatum. In der SELECT-Klausel habe ich einerseits hier die Spalte "a.text" aus der Abteilung, die liefert mir den Abteilungsnamen, dann aus der Personaltabelle den Nachnamen und den Vornamen und hier das Geburtsdatum mit der TO_DATE-Funktion. Da sehe ich gerade, da habe ich einen kleinen Fehler eingebaut, das muss natürlich TO_CHAR heißen, wenn ich das schön formatieren möchte. Und deshalb sehen Sie auch hier diesen Fehler. Dass jetzt hier die Jahreszahl nicht richtig formatiert war, das ist aus diesem Fehler hier resultiert. "AS geburtsdatum" damit es sauber formatiert ist, Mit diesem Ausdruck habe ich das Alter berechnet. Nachdem "alter" ja hier ein reserviertes Wort ist, unter doppelten Hochkomma, wenn ich es einheitlich großgeschrieben haben möchte ... denn unter doppelten Hochkomma wird ja die Groß/-Kleinschreibung beibehalten, ... schreibe ich sie auch in Großbuchstaben. Und nun das Durchschnittsalter aus meiner Unterabfrage ... auf eine Nachkommastelle gerundet, weil mehr benötigen wir in der Anzeige nicht ... kann ich mit anzeigen. Und nun führe ich die Anweisung aus und bekomme nun dieses Ergebnis heraus. Auch hier kann ich natürlich die Funktion die wir in Beispiel 15 schon berechnet und erstellt haben, verwenden, um das Durchschnittsalter zu berechnen. Sie sehen, dass Kopieren und Einfügen manchmal auch dazu führt, dass man schön Fehler mitkopiert, deswegen ersetze ich auch hier noch die Funktion "TO_DATE" durch "TO_CHAR" Und jetzt habe ich hier anstelle der Berechnung meine Funktion "wawi.fn_alter" und übergebe ihr das Alter als Parameter. Das habe ich auch hier in der Unterabfrage getan, und auch hier in der WHERE-Klausel. Und kann auf diese Art und Weise auch diese Ergebnis erzielen. Betrachten wir uns nun dasselbe Beispiel mit den beiden anderen Datenbankmanagementsystemen gelöst. Auch hier haben wir das Ergebnis. Aus Platzgründen gebe ich den Objektexplorer jetzt einmal hier in den Hintergrund, damit ich die volle Bildschirmbreite zur Verfügung habe, denn der Ausdruck für die Berechnung des Alters das ist hier entsprechend länger. Das haben wir beim Beispiel 15 schon besprochen. Prinzipiell ist der Aufbau derselbe, auch wenn das Ganze jetzt hier ... ich muss mich entschuldigen, dass es ein bisschen unübersichtlich wirkt und sehr lang ist. Das werden Sie ja auch in Ihrem Berechnungsausdruck im Skript besser sehen als am Bildschirm. Aber das Ganze, was hier lang und unübersichtlich ist, ist der Ausdruck zur Berechnung des Alters. Alles andere, was entscheidend ist hier, ist eigentlich ident so wie wir es kennen, bei Oracle haben wir da auch keinen Unterschied gesehen. Bis auf die Berechnung des Durchschnittalters ist alles ident. Und natürlich auch die Funktion, mit der wir hier das Datum formatieren. Ich nehme z. B. die CONVERT-Funktion um auf das deutsche Darstellungsformat zu kommen. Ich führe die Anweisung aus und wir sehen, dass wir jetzt hier das Durchschnittsalter mit angezeigt bekommen, und natürlich auch die Abteilung, da gibt es keinen Unterschied. Und auch hier noch einmal die Variante mit der Funktion "fn.alter", die wir im Beispiel 15 schon generiert haben, die erspart uns hier den Einsatz. Und dieses Beispiel ist jetzt, wenn ich mich nicht irre, bis auf die CONVERT-Funktion absolut ident in der Syntax hier mit Oracle. Und auch unter MySQL finden wir jetzt keine großen Unterschiede mehr. Hier die Berechnungsfunktion unterscheidet sich, der Rest der Syntax ist hier ident. Ich führe sie noch aus, damit Sie sehen, dass ich auch hier das Durchschnittschnittsalter zusätzlich angezeigt bekomme, so wie wir es wollen, und auch hier zum Abschluss noch einmal die Variante mit der in Beispiel 15 erzeugten Funktion "fn.alter". Und auch hier der einzige Unterschied, hier die Formatierung für die Ausgabe des Geburtsdatums alles andere ist ident. Was wir in diesem Beispiel gesehen haben, wir können eine Inline-View, das ist eine Unterabfrage, die wir in der FROM-Klausel verwenden, einsetzen, Ergebnisse vorerzeugen und auf diese vorerzeugten Ergebnisse zugreifen. Dadurch war es uns in diesem Beispiel möglich, das Durchschnittsalter, das wir in der Unterabfrage berechnet haben, zusätzlich auch mit über die SELECT-Klausel auszugeben, und damit im Ergebnis anzuzeigen.

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!