SQL Server-Unterabfrage
Zusammenfassung: In diesem Lernprogramm erfahren Sie mehr über die SQL Server-Unterabfrage und wie Sie die Unterabfrage zum Abfragen von Daten verwenden.
Einführung in die SQL Server-Unterabfrage
Eine Unterabfrage ist eine Abfrage, die in einer anderen Anweisung wie SELECT
, INSERT
verschachtelt ist. UPDATE
oder DELETE
.
Sehen wir uns das folgende Beispiel an.
Betrachten Sie das orders
und customers
Tabellen aus der Beispieldatenbank.
Die folgende Anweisung zeigt, wie eine Unterabfrage in der WHERE
-Klausel eines SELECT
Anweisung, um die Kundenaufträge der Kunden zu finden, die sich in New York
befinden:
Hier ist das Ergebnis:
In diesem Beispiel ist die folgende Anweisung eine Unterabfrage:
Code language: SQL (Structured Query Language) (sql)
Beachten Sie, dass Sie immer die SELECT
Abfrage einer Unterabfrage in Klammern ()
.
Eine Unterabfrage wird auch als innere Abfrage oder innere Auswahl bezeichnet, während die Anweisung, die die Unterabfrage enthält, als bezeichnet wird äußere Auswahl oder äußere Abfrage:
SQL Der Server führt das gesamte obige Abfragebeispiel wie folgt aus:
Zunächst führt er die Unterabfrage aus, um eine Liste der Kundenidentifikationsnummern der Kunden abzurufen, die sich in New York
befinden.
Code language: SQL (Structured Query Language) (sql)
Zweitens ersetzt SQL Server die von der Unterabfrage im Operator IN
zurückgegebenen Kundenidentifikationsnummern und führt die äußere Abfrage aus, um die endgültige Ergebnismenge zu erhalten.
Wie du kannst s Mit der Unterabfrage können Sie zwei Schritte miteinander kombinieren. Durch die Unterabfrage entfällt die Notwendigkeit, die Kundenidentifikationsnummern auszuwählen und in die äußere Abfrage einzufügen. Darüber hinaus wird die Abfrage selbst automatisch angepasst, wenn sich die Kundendaten ändern.
Verschachteln von Unterabfragen
Eine Unterabfrage kann in einer anderen Unterabfrage verschachtelt werden. SQL Server unterstützt bis zu 32 Verschachtelungsebenen. Betrachten Sie das folgende Beispiel:
SQL Server führt die folgende Unterabfrage aus, um eine Liste der Markenidentifikationsnummern der Marken Strider
und Trek
abzurufen:
Zweitens berechnet SQL Server die durchschnittliche Preisliste aller dazugehörigen Produkte an diese Marken.
Code language: SQL (Structured Query Language) (sql)
Drittens findet SQL Server die Produkte, deren Listenpreis höher ist als der durchschnittliche Listenpreis aller Produkte mit der Strider
oder Trek
Marke.
SQL Server-Unterabfragetypen
Sie können eine Unterabfrage an vielen Stellen verwenden:
- Anstelle eines Ausdrucks
- Mit
IN
oderNOT IN
- Mit
ANY
oderALL
- Mit
EXISTS
oderNOT EXISTS
- In
UPDATE
DELETE
, oderINSERT
-Anweisung - In der
FROM
-Klausel
SQL Server-Unterabfrage wird anstelle eines Ausdrucks verwendet.
Wenn eine Unterabfrage einen einzelnen Wert zurückgibt, kann sie überall dort verwendet werden, wo ein Ausdruck verwendet wird.
Im folgenden Beispiel wird eine Unterabfrage als verwendet Spaltenausdruck mit dem Namen max_list_price
in einer SELECT
-Anweisung.
SQL Server-Unterabfrage wird mit dem IN-Operator
verwendet. Eine Unterabfrage, die mit der IN
gibt einen Satz von null oder mehr Werten zurück. Nachdem die Unterabfrage Werte zurückgegeben hat, werden diese von der äußeren Abfrage verwendet.
In der folgenden Abfrage werden die Namen aller Mountainbikes und Rennradprodukte gefunden, die von den Fahrradgeschäften verkauft werden.
Diese Abfrage wird in zwei Schritten ausgewertet:
- Zuerst gibt die innere Abfrage eine Liste von Kategorie-Identifikationsnummern zurück, die mit den Namen
Mountain Bikes
undcode
Rennräder übereinstimmen. - Zweitens werden diese Werte in die äußere Abfrage eingesetzt, in der die Produktnamen gefunden werden, deren Kategorie-Identifikationsnummer mit einem der Werte in der Liste übereinstimmt.
SQL Server-Unterabfrage wird mit JEDEM Operator verwendet.
Die Unterabfrage wird mit dem Operator ANY
eingeführt und hat die folgende Syntax:
Code language: SQL (Structured Query Language) (sql)
Angenommen, die Unterabfrage gibt eine Liste mit den Werten v1, v2, … vn zurück. Der Operator ANY
gibt TRUE
zurück, wenn eines aus einem Vergleichspaar (scalar_expression
, vi) ausgewertet wird zu TRUE
; Andernfalls wird FALSE
zurückgegeben.
In der folgenden Abfrage werden beispielsweise die Produkte gefunden, deren Listenpreise größer oder gleich dem durchschnittlichen Listenpreis einer Produktmarke sind
Für jede Marke die Unterabfrage findet den maximalen Listenpreis. Die äußere Abfrage verwendet diese maximalen Preise und bestimmt, welcher Listenpreis eines einzelnen Produkts größer oder gleich dem maximalen Listenpreis einer Marke ist.
Die SQL Server-Unterabfrage wird mit dem ALL-Operator
The ALL
hat dieselbe Syntax wie der Operator ANY
:
Code language: SQL (Structured Query Language) (sql)
Der Operator ALL
gibt TRUE
zurück, wenn alle Vergleichspaare (scalar_expression
, vi) ausgewertet werden TRUE
; Andernfalls wird FALSE
zurückgegeben.
Die folgende Abfrage ermittelt die Produkte, deren Listenpreis größer oder gleich dem von der Unterabfrage zurückgegebenen durchschnittlichen Listenpreis ist:
Die SQL Server-Unterabfrage wird mit EXISTS oder NOT verwendet EXISTS
Das Folgende veranschaulicht die Syntax einer Unterabfrage, die mit dem Operator EXISTS
eingeführt wurde:
Code language: SQL (Structured Query Language) (sql)
Der Operator EXISTS
gibt TRUE
zurück, wenn die Unterabfrage zurückgegeben wird. Andernfalls wird FALSE
zurückgegeben.
Andererseits ist die NOT EXISTS
der -Operator.
Die folgende Abfrage findet die Kunden, die 2017 Produkte gekauft haben:
Wenn Sie die NOT EXISTS
anstelle von EXISTS
finden Sie die Kunden, die 2017 keine Produkte gekauft haben.
SQL Server-Unterabfrage in der FROM-Klausel
Angenommen, Sie möchten den Durchschnitt der Auftragssumme aller Vertriebsmitarbeiter ermitteln. Dazu ermitteln Sie zunächst die Anzahl der Bestellungen nach Mitarbeitern:
Anschließend können Sie die Funktion AVG()
auf diese Ergebnismenge anwenden. Da eine Abfrage eine Ergebnismenge zurückgibt, die wie eine virtuelle Tabelle aussieht, können Sie die gesamte Abfrage in die FROM
-Klausel einer anderen Abfrage wie folgt einfügen:
Die Abfrage, die Sie in FROM
muss einen Tabellenalias haben. In diesem Beispiel haben wir das t als Tabellenalias für die Unterabfrage verwendet. Um das Endergebnis zu erhalten, führt SQL Server die folgenden Schritte aus:
- Führen Sie die Unterabfrage in der
FROM
-Klausel aus. - Verwenden Sie das Ergebnis der Unterabfrage und führen Sie die äußere Abfrage aus.
In diesem Lernprogramm haben Sie das SQL Server-Unterabfragekonzept und die Verwendung verschiedener Unterabfragetypen zum Abfragen von Daten kennengelernt. P. >