Saturday, December 24, 2022

SQL-Unterabfragen – Microsoft Support

Eine Unterabfrage ist eine SELECT-Anweisung, die in einer SELECT-, SELECT...INTO-, INSERT...INTO-, DELETE- oder UPDATE-Anweisung oder in einer anderen Unterabfrage verschachtelt ist.

Syntax

Sie können drei Arten von Syntax verwenden, um eine Unterabfrage zu erstellen:

Vergleich [JEDER | ALLE | EINIGE] ( sqlstatement )

Ausdruck [NOT] IN ( sqlstatement )

[NICHT] VORHANDEN ( sqlstatement )

Eine Unterabfrage hat folgende Teile:

Teil

Beschreibung

Vergleich

Ein Ausdruck und ein Vergleichsoperator, der den Ausdruck mit den Ergebnissen der Unterabfrage vergleicht.

Ausdruck

Ein Ausdruck, nach dem die Ergebnismenge der Unterabfrage durchsucht wird.

SQL-Anweisung

Eine SELECT-Anweisung, die demselben Format und denselben Regeln folgt wie jede andere SELECT-Anweisung. Es muss in Klammern eingeschlossen werden.


Bemerkungen

Sie können eine Unterabfrage anstelle eines Ausdrucks in der Feldliste einer SELECT-Anweisung oder in einer WHERE- oder HAVING-Klausel verwenden. In einer Unterabfrage verwenden Sie eine SELECT-Anweisung, um einen Satz von einem oder mehreren spezifischen Werten bereitzustellen, die im WHERE- oder HAVING-Klauselausdruck ausgewertet werden sollen.

Verwenden Sie das synonyme Prädikat ANY oder SOME, um Datensätze in der Hauptabfrage abzurufen, die den Vergleich mit allen in der Unterabfrage abgerufenen Datensätzen erfüllen. Das folgende Beispiel gibt alle Produkte zurück, deren Stückpreis höher ist als der Preis eines Produkts, das mit einem Rabatt von 25 Prozent oder mehr verkauft wird:

SELECT * FROM Products WHERE UnitPrice > ANY (SELECT UnitPrice FROM OrderDetails WHERE Discount >= .25);

Verwenden Sie das Prädikat ALL, um nur die Datensätze in der Hauptabfrage abzurufen, die den Vergleich mit allen in der Unterabfrage abgerufenen Datensätzen erfüllen. Wenn Sie im vorherigen Beispiel ANY in ALL geändert haben, würde die Abfrage nur die Produkte zurückgeben, deren Stückpreis höher ist als der Preis aller Produkte, die mit einem Rabatt von 25 Prozent oder mehr verkauft werden. Das ist viel restriktiver.

Verwenden Sie das Prädikat IN, um nur die Datensätze in der Hauptabfrage abzurufen, für die ein Datensatz in der Unterabfrage einen gleichen Wert enthält. Das folgende Beispiel gibt alle Produkte mit einem Rabatt von 25 Prozent oder mehr zurück:

SELECT * FROM Products WHERE ProductID IN (SELECT ProductID FROM OrderDetails WHERE Discount >= .25);

Umgekehrt können Sie mit NOT IN nur solche Datensätze in der Hauptabfrage abrufen, für die kein Datensatz in der Unterabfrage einen gleichen Wert enthält.

Verwenden Sie das Prädikat EXISTS (mit dem optionalen reservierten Wort NOT) in Wahr/Falsch-Vergleichen, um festzustellen, ob die Unterabfrage Datensätze zurückgibt.

Sie können auch Aliase für Tabellennamen in einer Unterabfrage verwenden, um auf Tabellen zu verweisen, die in einer FROM-Klausel außerhalb der Unterabfrage aufgeführt sind. Das folgende Beispiel gibt die Namen von Mitarbeitern zurück, deren Gehälter gleich oder höher als das Durchschnittsgehalt aller Mitarbeiter mit derselben Berufsbezeichnung sind. Die Employees-Tabelle erhält den Alias ​​„T1":

SELECT LastName, FirstName, Title, Salary FROM Employees AS T1 WHERE Salary >= (SELECT Avg(Gehalt) FROM Employees WHERE T1.Title = Employees.Title) Sortieren nach Titel;

Im vorangehenden Beispiel ist das reservierte AS-Wort optional.

Einige Unterabfragen sind in Kreuztabellenabfragen zulässig – insbesondere als Prädikate (die in der WHERE-Klausel). Unterabfragen als Ausgabe (die in der SELECT-Liste) sind in Kreuztabellenabfragen nicht zulässig.



No comments:

Post a Comment