Unterabfragen
Eine Unterabfrage ist ein Auswahlausdruck, der als verschachtelter Abfrageblock in Klammern in einer Abfrageanweisung eingeschlossen ist.
- AUSWÄHLEN
- EINFÜGEN
- LÖSCHEN
- AKTUALISIEREN
- CREATE TABLE AS
- INSERT INTO
- SELECT INTO
Sie können Unterabfragen in beliebiger Tiefe verschachteln.
Die übergeordnete Abfrage, die die Unterabfrage enthält, wird oft als Superabfrage oder äußere Abfrage bezeichnet. Unterfragen in derselben übergeordneten Abfrage werden verwendet, um Gruppen von Ergebnissen abzuleiten, die in Verbindung mit der übergeordneten Abfrage ausgewertet werden können.
- Zeilenunterabfrage
- Gibt eine Zeile (oder keine Zeilen) und mehrere Spalten zurück und kann in einer Auswahlliste oder in einem Bedingungsausdruck verwendet werden, z. B. als Argument eines Vergleichsoperators.
- Tabellenunterabfrage
- Gibt mehrere (0 - n) Zeilen und mehrere Spalten zurück und kann in einer FROM-Klausel oder als Argument eines EXISTS-, IN-, ANY- oder ALL-Tests auftreten.Die Abfrage "Alle Filialen auflisten, in denen der Umsatz mehr als ein Prozent des Gesamtunternehmensumsatzes beträgt" kann in der SQL-Form einer Abfrage innerhalb einer Abfrage mit einer skalaren Unterabfrage geschrieben werden:
SELECT StoreId FROM Stores WHERE TotalSale > 0.01* (SELECT SUM(TotalSales) FROM Stores);Das System berechnet zuerst die Summe der Umsätze der inneren Unterabfrage und verwendet diese dann bei der Ausführung der übergeordneten Abfrage.
- Singleton-Unterabfrage
- Gibt genau einen Wert in Form einer Tabelle mit einer Zeile (bzw. null Zeilen) und einer Spalte zurück.
Bei all diesen Unterabfragen wertet das System diese einmal aus und berechnet und speichert deren Auswahlausdruck. Beim Ausführen der Superabfrage setzt das System die berechneten Werte anstelle der Unterabfrage ein.
Eine korrelierte Unterabfrage ist jedoch eine Abfrage innerhalb einer Abfrage, die die übergeordnete Abfrage referenziert (korreliert). Bei korrelierten Unterabfragen wertet das System die Unterabfrage einmal für jede in der äußeren Tabelle ausgewählten Zeile aus.