23rd Jun 2022 5 Leseminuten Was ist eine SQL-Inline-Abfrage? Kamil Bladoszewski Unterabfrage Inhaltsverzeichnis Subquery vs. Inline-Ansichten Was ist also eine Inline-Abfrage? Inline-Ansichten außerhalb von Oracle Inline-Ansichten vs. Unterabfragen Wie sehr spielen Namen eine Rolle? Nicht sehr viel! Haben Sie schon einmal den Begriff "Inline-Abfrage" gehört? Wie unterscheiden sie sich von Unterabfragen und abgeleiteten Tabellen? Haben Sie schon an vielen Stellen nachgeschlagen und wissen immer noch nicht die Antwort? Lassen Sie uns auf eine Reise gehen und es gemeinsam herausfinden! Als ich den Begriff "Inline-Abfrage" zum ersten Mal hörte, war ich ein wenig überrascht. Er klingt nicht wie eine der Feinheiten von SQL und ich dachte, ich kenne alle grundlegenden Konzepte. Leider war es nicht sehr hilfreich, den Begriff zu googeln - es gab nur wenige Ergebnisse und alle Antworten waren vage. Ich brauchte einige Zeit, um richtig zu recherchieren und etwas über Inline-Abfragen in SQL zu lernen. Deshalb habe ich beschlossen, diesen Artikel zu schreiben und alles, was ich gelernt habe, an einem Ort zu sammeln. Subquery vs. Inline-Ansichten Haben Sie schon einmal von einer Subquery gehört? Das ist eine Abfrage innerhalb einer Abfrage - zumindest in der Terminologie, die mir beigebracht wurde. Dann gibt es noch den Begriff Inline-View. Eine Inline-Ansicht ist eine Abfrage in der FROM -Klausel einer anderen Abfrage. Wie ich gelernt habe, ist dies dasselbe wie eine Unterabfrage. In Oracle werden Inline-Views jedoch nur in der FROM-Klausel platziert, während Subqueries in den Klauseln SELECT oder WHERE stehen. (Siehe Subquery in den Oracle-FAQs und Inline-View in den Oracle-FAQs.) Mit anderen Worten, Oracle behandelt diese als zwei unterschiedliche Konzepte. Wenn Sie also außerhalb von Oracle etwas über Subqueries gelernt haben, können Sie auch Inline Views verstehen. Sie sollten jedoch bedenken, dass Oracle-Benutzer Sie missverstehen könnten, wenn Sie die Begriffe Subqueries und Inline Views synonym verwenden. Wir werden jetzt nicht mehr Zeit auf Unterabfragen verwenden. Wenn Sie mit ihnen nicht vertraut sind, empfehle ich Ihnen den SQL-Unterabfragen Artikel auf dem LearnSQL.de Blog zu lesen, der einen grundlegenden Überblick über das Thema gibt. Was ist also eine Inline-Abfrage? Eine Inline-Abfrage ist eine Abfrage in der FROM-Klausel. Sie wählen Daten daraus aus, wie Sie es mit einer Tabelle tun würden. Werfen wir einen Blick auf ein Beispiel für eine Inline-Abfrage. Wir werden mit einigen Filmdaten von einer Website arbeiten, auf der die Leute die Filme bewerten, die sie gesehen haben: movie - Enthält Informationen über Filme: id - Eine eindeutige ID für jeden Film. title - Der Titel des Films. year - Wann der Film veröffentlicht wurde. director_id - Die ID des Regisseurs des Films. rating - Speichert Benutzerbewertungen für Filme: id - Eine eindeutige ID für jede Bewertung. rating - Eine Zahl von 1 (was bedeutet: "Der Film ist so schlecht, dass seine Vorführung verboten werden sollte") bis 10 (was bedeutet: "Ich könnte diesen Film für den Rest meines Lebens rund um die Uhr ansehen"). movie_id - die ID des bewerteten Films. user_id - die ID des Benutzers, der den Film bewertet hat. movie idtitleyeardirector_id 1The Lord of the Rings: The Return of the King200314 2Mad Max: Fury Road201569 3Avengers: Endgame201971 rating idratingmovie_iduser_id 171332 261469 3101767 4101111 58184 622417 772441 8102118 95274 1022630 1110399 1243189 1373887 1483521 1543144 Die Abfrage zeigt die höchste durchschnittliche Filmbewertung an. Schauen Sie sich das an: SELECT MAX(avg_rating) AS max_avg_rating FROM ( SELECT AVG(rating) AS avg_rating FROM rating GROUP BY movie_id ) AS avg_movie_ratings; max_avg_rating 8.2 In der FROM-Klausel haben wir die Inline-Ansicht ( avg_movie_ratings genannt und fett dargestellt) verwendet, um die durchschnittliche Bewertung für jeden Film zu berechnen. Dann haben wir aus den Durchschnittswerten den höchsten Wert ausgewählt. Die von uns verwendete Inline-Ansicht funktioniert wie eine temporäre Tabelle. Inline-Ansichten außerhalb von Oracle Wie ich bereits erwähnt habe, ist der Begriff "Inline View " eigentlich ein Oracle-Begriff. Ich bin auch über ihn gestolpert, als ich über MySQL gelesen habe; einige Leute bezeichnen ihn jedoch als Inline-View und andere als Subquery. In anderen Datenbank-Engines haben Inline-Views andere Namen. In MS SQL Server zum Beispiel wird eine Unterabfrage in einer FROM -Klausel als abgeleitete Tabelle bezeichnet. Sie haben wahrscheinlich bemerkt, dass ich hier den Begriff Subquery verwende. Das liegt daran, dass Subquery (oder manchmal auch Subselect) der Name ist, der in PostgreSQL verwendet wird - der Datenbank-Engine, die ich am häufigsten benutze. Diese Bezeichnung wird auch von der Mehrheit der MySQL-Benutzer verwendet. Egal wie Sie Inline-Views nennen, denken Sie daran - es ist nur der Name eines Konzepts. Es ist nicht wirklich wichtig, wie Sie es benennen. Wichtig ist, dass Sie wissen, wie Sie das Konzept in Ihren Abfragen richtig verwenden. Inline-Ansichten vs. Unterabfragen Kehren wir für einen Moment zur Terminologie von Oracle zurück. Was ist der Unterschied zwischen Inline-Views und Subselects (siehe Subquery in den Oracle FAQs), wenn sie in einigen Engines denselben Namen haben? Auch wenn sie ähnlich aussehen, funktionieren sie unterschiedlich. Wir werden uns auf die beiden größten Unterschiede konzentrieren. Der erste Unterschied besteht darin, dass Inline-Views mehrere Spalten enthalten können, während Subqueries (im Sinne von Oracle) nur eine Spalte zurückgeben sollten. Der Grund dafür ist einfach: Ein Inline-View funktioniert wie eine Tabelle, und Tabellen können mehr als eine Spalte enthalten. Unterabfragen hingegen funktionieren in der Regel als ein einziger Wert. Der zweite Grund ist die Korrelation. In Nicht-Inline-Ansichten können Sie einen Wert für die äußere (Haupt-)Abfrage verwenden. Auf diese Weise kann Ihre Unterabfrage für verschiedene Zeilen einen anderen Wert zurückgeben. Dieses Konzept ist sehr leistungsfähig und kann Ihnen beim Schreiben komplizierter Abfragen Zeit sparen. Lesen Sie mehr darüber in Korrelierte unterabfrage in SQL: Ein leitfaden für Anfänger auf dem LearnSQL.de Blog. Wenn Sie mehr Informationen zu diesem Thema und den verschiedenen Arten von Unterabfragen (einschließlich Inline-Ansichten) benötigen, lesen Sie den Artikel Was sind die verschiedenen Typen von SQL-Unterabfragen?. Wie sehr spielen Namen eine Rolle? Nicht sehr viel! Wie ich bereits erwähnt habe, spielt es keine Rolle, ob Sie das Konzept Inline-View, abgeleitete Tabelle, Unterabfrage oder Unterauswahl nennen. Alles hängt davon ab, wie gut Sie diese leistungsstarke SQL-Technik kennen und anwenden. Wenn Sie mit anderen kommunizieren, sollten Sie natürlich Ihr Bestes tun, um Missverständnisse zu vermeiden. Deshalb lohnt es sich, all die verschiedenen Namen zu kennen, die dieses Konzept trägt. Wenn sich Ihr Team einig ist, kann die Inline-Ansicht auch From-Part-Dingamajig genannt werden - solange alle wissen, wovon Sie sprechen! Wenn Sie noch nie von diesem Konzept gehört haben, sollten Sie sich den SQL für Anfänger Kurs unter LearnSQL.de. Wenn Sie bereits etwas darüber gelernt haben, sich aber nicht sehr sicher fühlen, können Sie ein paar Übungen aus dem Kurs SQL-Übungssatz. Wir hoffen, dass es Ihnen nichts ausmacht, wenn wir das Konzept Subquery nennen. Tags: Unterabfrage