Zurück zur Artikelliste Artikel
5 Leseminuten

Was ist eine SQL-Inline-Abfrage?

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.