SQL Grundkurs 1: Die Sprache erlernen

Inline-VIEW

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Eine Unterabfrage, die in der FROM-Klausel verwendet wird, nennt man auch Inline-VIEW. Erzeugen Sie damit ein tabellarisches Zwischenergebnis, welches Sie zum Beispiel mit einem JOIN verfeinern!

Transkript

Unterabfragen in der FROM-Klausel sind ein sehr praktisches Werkzeug. Wie Sie dies in der Praxis einsetzen, zeige ich Ihnen in diesem Video. Dafür möchte ich folgendes Beispiel verwenden: Und zwar wollen wir Artikel eruieren, die mehr kosten als der Durchschnitt ihrer Artikelgruppe. Sie sehen diese Aufgabenstellung hier über eine synchronisierte Unterabfrage gelöst. In der Unterabfrage wird der Durchschnittspreis einer Artikelgruppe eruiert und dann an die Hauptabfrage übergeben. Der Nachteil der synchronisierten Unterabfrage ist in erster Linie die Performance. D.h., die Unterabfrage wird für jeden potentiellen Datensatz einmal ausgeführt D.h., wenn wir über 1000 Artikel  in der Artikel-Tabelle haben, wird die Unterabfrage auch mehr als 1000 mal hier ausgeführt. Ein weiterer Nachteil ist, dass Dinge, die die Unterabfrage in der WHERE-Klausel eruiert, zwar von der Hauptabfrage verwendet werden können, aber nicht angezeigt werden. D.h., wir sehen hier z.B., dass ein Besteck mit einem Preis von 14,06€ über dem Durchschnittspreis der Artikel-Gruppe "Besteck" liegt, aber wir wissen eigentlich nicht, wo genau jetzt der Durchschnittspreis dieser Artikel-Gruppe liegt. Daher können wir das Gesamte eleganter lösen, wenn wir eine Unterabfrage in der FROM-Klausel verwenden. Was ist die Idee dahinter? Ersetzen wir doch die Unterabfrage in der WHERE-Klausel durch einen JOIN. Damit wir einen JOIN machen können, bräuchten wir ja etwas in Tabellenform. Das könnte hier z.B. so aussehen, dass wir hier hergehen, ich baue mir hier ganz schnell die entsprechende Anweisung auf, wir holen uns aus der Artikeltabelle die Artikelgruppe, gruppieren danach und bilden den Durchschnittspreis. Wenn wir uns jetzt dieses Ergebnis betrachten, dann ist das ein Ergebnis in tabellarischer Form. Wir haben hier einerseits eine Artikel-Gruppe, in gruppierter Form ist das erzeugt, und den jeweiligen Durchschnittspreis. Anstelle jetzt die Unterabfrage zu verwenden, könnten wir ja unsere Artikeltabelle mit dieser sozusagen temporären Tabelle hier joinen, über die Artikelgruppe, und dann in der WHERE-Klausel einfach definieren, dass wir nur jene angezeigt haben möchten, deren Preis über diesem errechneten Durchschnittspreis liegt. Genau das können wir, wenn wir diese Anweisung als Unterabfrage in die FROM-Klausel einbauen. Was müssen wir dazu also tun? Ich kopiere mir diesen Teil hier und beginne mit dem. Wir wollen aus der Tabelle "Artikel" etwas verwenden, aber nachdem wir jetzt joinen wollen, werde ich hier gleich einen Tabellenaliasnamen vergeben, und auch einen INNER JOIN und im Normalfall würde ich ja jetzt den Namen der zweiten Tabelle hier anführen. Wir haben ja keine physische Tabelle sondern sozusagen nur eine virtuelle Tabelle in Form dieses Ergebnisses und hier kopiere ich mir einfach, wie vorhin über die WHERE-Klausel auch, diese Unterabfrage herein in runde Klammern gesetzt, das ist ganz wichtig. Ich füge das hier ein, ich werde das natürlich auch wieder so einrücken, dass das gut lesbar ist und beende das Ganze mit einer runden Klammer. Das heißt, anstelle einer Tabelle tritt hier eine Unterabfrage, in runde Klammern gesetzt. Damit das funktionieren kann, sind zwei Dinge noch wichtig. Einerseits müssen wir einer berechneten Spalte, wie hier diesem Durchschnittspreis, auch wirklich einen physischen Namen geben, sonst bekommen wir einen Fehler. D.h., hier z.B. als "Schnitt" für den Durchschnittspreis. Und diese Unterabfrage hat ja jetzt keinen innerhalb der Anweisung verwertbaren Tabellennamen, deshalb muss ich ihr unbedingt einen Tabellenaliasnamen geben. Das mache ich, indem ich hier einfach "D" definiere, "D" für Durchschnitt als Tabellenaliasname. Ich schließe den JOIN ab, indem ich die JOIN-Bedingungen noch ergänze und zwar bedeutet das, dass "A.Gruppe", das heißt die Artikel-Gruppe aus der Artikel-Tabelle, dasselbe enthält wie die Spalte "Gruppe" aus meiner Unterabfrage, in dem Fall "D." - "D" ist ja der Tabellenaliasname "D.Gruppe". Und damit hätte ich hier gejoint. Natürlich werde ich jetzt sinnvollerweise das Tabellen-Präfix auch in der SELECT-Klausel bei den betroffenen Spalten ergänzen, damit das Ganze hier sauber realisiert ist. Und nun wollten wir ja nur jene Artikel anzeigen, die mehr kosten als der Durchschnittspreis ihrer Artikelgruppe. Den Durchschnittspreis können wir ja jetzt, nachdem er hier eruiert wird und in der FROM-Klausel das Ergebnis verfügbar ist, ja auch anzeigen. D.h., ich kann hier "D.Schnitt" ebenso ergänzen. Ich führe mal diese Anweisung noch mal aus, damit wir mal sehen, welches Teilergebnis wir bisher hier zurückbekommen. Wir sehen jetzt hier, dass wir neben den klassischen Daten aus der Artikeltabelle auch den Durchschnittspreis dazu gejoint haben. Wir sehen jetzt also, dass wir bei der Artikelgruppe "Besteck" einen Durchschnittspreis von knapp 10,82€ hier haben. Wenn ich jetzt hier hinunterscrolle, sehen wir, wenn wir zu den elektrischen Geräten kommen, springt dieser Preis auf knapp 72€ hinauf. Und jetzt müssen wir in der WHERE-Klausel nur mehr definieren, dass dieser Verkaufspreis größer als dieser berechnete Durchschnittspreis sein muss. Also, "WHERE A.VK-Preis " dieser Durchschnittspreis, also "D.Schnitt". Für ein sauberes Ergebnis verwende ich noch eine Sortierung, "ORDER BY A.Gruppe,A.Verkaufspreis". Betrachten wir uns nun das gesamte Ergebnis. Das Ergebnis ist nun von der Anzahl der Datensätze, 313 Datensätze sind das wieder, dasselbe wie wir vorhin mit der synchronisierten Unterabfrage hatten. Worin liegt jetzt der Vorteil? Der große Vorteil liegt darin, dass diese Unterabfrage nicht wiederholt für jede Zeile sondern genau so vorweg einmal ausgeführt wird. Sie wird einmal ausgeführt und dann wird dieses ermittelte Ergebnis, was sozusagen im Speicher gehalten wird, mit der Tabelle gejoint. D.h. aus Performance-Sicht ist diese Variante wesentlich effizienter als eine synchronisierte Unterabfrage. Der nächste Vorteil ist, dass Sie aufgrund dessen, dass die Informationen in der FROM-Klausel verfügbar sind, auch den Durchschnittspreis hier in der SELECT-Klausel anzeigen können. Das konnten Sie mit der synchronisierten Unterabfrage nicht. Wir haben zwar den ersten Preis gesehen, der über diesem Durchschnittspreis liegt, aber wir konnten damit weiter nichts machen. Wir konnten nicht eruieren, wie viel er über diesem Durchschnittspreis gelegen ist. Sogar das können wir hier, ich kann jetzt hier sogar eine berechnete Spalte noch abschließend hier ergänzen, wo ich eintrage: Ich nehme den "A.VK-Preis" minus den berechneten Durchschnittspreis und gebe das als Differenz aus. Und dann haben wir sogar diese Differenz zum Durchschnittspreis hier angezeigt. Über Unterabfragen, die Sie in der FROM-Klausel verwenden, können Sie Zwischenergebnisse eruieren, die Sie dann weiter verwenden können. Damit können Sie Aufgabenstellungen realisieren, die Sie innerhalb einer Abfrage als zu komplex erachten und können somit ein Zwischenergebnis erzeugen und auf diesem Zwischenergebnis aufbauen. Diese Methode wird auch als Inline View bezeichnet, weil diese Verwendung einer Unterabfrage der einer View gleicht. Eine View ist ein physisch in der Datenbank gespeichertes SELECT-Statement, auf das zugegriffen werden kann. Nur wird diese View hier nicht physisch erzeugt, sondern die wird online sozusagen on the fly hier innerhalb der Anweisungszeile der Hauptabfrage generiert und deshalb hat sie auch die Bezeichnung Inline View bekommen. Sie haben in diesem Video gesehen, wie Sie eine Unterabfrage in der FROM-Klausel einbauen können um damit Zwischenergebnisse zu erzielen, mit denen Sie dann weiter arbeiten können. Ob Sie dieses mit anderen joinen oder nur weiter filtern oder einschränken, das bleibt Ihnen überlassen.

SQL Grundkurs 1: Die Sprache erlernen

Arbeiten Sie sich in die Grundlagen der Datenbanksprache SQL am Beispiel von Microsoft SQL Server, Oracle und MySQL ein und lassen Sie sich die praktische Nutzung erklären.

14 Std. 40 min (112 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!