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 oder NOT IN
  • Mit ANY oder ALL
  • Mit EXISTS oder NOT EXISTS
  • In UPDATE DELETE, oder INSERT -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:

  1. Zuerst gibt die innere Abfrage eine Liste von Kategorie-Identifikationsnummern zurück, die mit den Namen Mountain Bikes und code Rennräder übereinstimmen.
  2. 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. >

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.