subquery
Ist eine Unterabfrage mit einem Resultset, das aus einer Spalte besteht. Diese Spalte muss denselben Datentyp besitzen wie test_expression.
expression[ ,... n ]
Eine Liste mit Ausdrücken, die auf Übereinstimmungen geprüft werden sollen. Alle Ausdrücke müssen denselben Datentyp besitzen wie test_expression.
Ergebnistypen
Boolescher Wert
Ergebniswert
Wenn der Wert von test_expression einem von der Unterabfrage zurückgegebenen Wert oder einem Ausdruck aus der durch Trennzeichen getrennten Liste entspricht, ist der Ergebniswert TRUE. Andernfalls ist der Ergebniswert FALSE.
Die Verwendung von NOT IN negiert den Wert der Unterabfrage oder den Ausdruck.
Achtung
Bei von der Unterabfrage oder dem Ausdruck zurückgegebenen NULL-Werten, die mithilfe von IN oder NOT IN mit test_expression verglichen werden, wird UNKNOWN zurückgegeben. Werden NULL-Werte zusammen mit IN oder NOT IN verwendet, kann dies zu unerwarteten Ergebnissen führen.
Hinweise
Wenn eine IN-Klausel eine extrem hohe Anzahl von Werten (viele Tausende durch Trennzeichen getrennte Werte) explizit in den Klammern enthält, können die Ressourcen überbeansprucht werden und die Fehler 8623 oder 8632 auftreten. Speichern Sie die Elemente in der IN-Liste in einer Tabelle, und verwenden Sie eine SELECT-Unterabfrage in einer IN-Klausel, um dieses Problem zu umgehen.
Fehler 8623:
The query processor ran out of internal resources and could not produce a query plan. This is a rare event and only expected for extremely complex queries or queries that reference a very large number of tables or partitions. Please simplify the query. If you believe you have received this message in error, contact Customer Support Services for more information.
Fehler 8632:
Internal error: An expression services limit has been reached. Please look for potentially complex expressions in your query, and try to simplify them.
Beispiele
A. Vergleichen von OR und IN
Im folgenden Beispiel wird eine Liste der Namen von Mitarbeitern ausgewählt, die Konstruktionsingenieure, Werkzeugkonstrukteure oder Marketingassistenten sind.
-- Uses AdventureWorks
SELECT p.FirstName, p.LastName, e.JobTitle
FROM Person.Person AS p
JOIN HumanResources.Employee AS e
ON p.BusinessEntityID = e.BusinessEntityID
WHERE e.JobTitle = 'Design Engineer'
OR e.JobTitle = 'Tool Designer'
OR e.JobTitle = 'Marketing Assistant';
GO
Sie können jedoch dieselben Ergebnisse mithilfe von IN abrufen.
-- Uses AdventureWorks
SELECT p.FirstName, p.LastName, e.JobTitle
FROM Person.Person AS p
JOIN HumanResources.Employee AS e
ON p.BusinessEntityID = e.BusinessEntityID
WHERE e.JobTitle IN ('Design Engineer', 'Tool Designer', 'Marketing Assistant');
GO
Im Folgenden wird das Resultset der beiden Abfragen aufgeführt.
Im folgenden Beispiel werden alle IDs der Vertriebsmitarbeiter in der SalesPerson-Tabelle der Mitarbeiter ermittelt, deren jährliche Sollvorgabe über 250.000 EUR liegt, und aus der Employee-Tabelle die Namen aller Mitarbeiter ausgewählt, bei denen EmployeeID mit den Ergebnissen der SELECT-Unterabfrage übereinstimmt.
-- Uses AdventureWorks
SELECT p.FirstName, p.LastName
FROM Person.Person AS p
JOIN Sales.SalesPerson AS sp
ON p.BusinessEntityID = sp.BusinessEntityID
WHERE p.BusinessEntityID IN
(SELECT BusinessEntityID
FROM Sales.SalesPerson
WHERE SalesQuota > 250000);
GO
Im folgenden Beispiel werden die Vertriebsmitarbeiter gesucht, deren Quote 250.000 $ nicht übersteigt. NOT IN sucht die Vertriebsmitarbeiter, die nicht den Elementen in der Werteliste entsprechen.
-- Uses AdventureWorks
SELECT p.FirstName, p.LastName
FROM Person.Person AS p
JOIN Sales.SalesPerson AS sp
ON p.BusinessEntityID = sp.BusinessEntityID
WHERE p.BusinessEntityID NOT IN
(SELECT BusinessEntityID
FROM Sales.SalesPerson
WHERE SalesQuota > 250000);
GO
Beispiele: Azure Synapse Analytics und Analytics-Plattformsystem (PDW)
D: Verwenden von IN und NOT IN
Im folgenden Beispiel werden alle Einträge in der Tabelle FactInternetSales gefunden, die den Werten von SalesReasonKey in der Tabelle DimSalesReason entsprechen.
-- Uses AdventureWorks
SELECT * FROM FactInternetSalesReason
WHERE SalesReasonKey
IN (SELECT SalesReasonKey FROM DimSalesReason);
Im folgenden Beispiel werden alle Einträge in der Tabelle FactInternetSalesReason gefunden, die den Werten von SalesReasonKey in der Tabelle DimSalesReason nicht entsprechen.
-- Uses AdventureWorks
SELECT * FROM FactInternetSalesReason
WHERE SalesReasonKey
NOT IN (SELECT SalesReasonKey FROM DimSalesReason);
E. Verwendung von IN mit einer Ausdrucksliste
Im folgenden Beispiel werden alle IDs der Vertriebsmitarbeiter in der Tabelle DimEmployee gefunden, die den Vornamen Mike oder Michael haben.
-- Uses AdventureWorks
SELECT FirstName, LastName
FROM DimEmployee
WHERE FirstName IN ('Mike', 'Michael');
Das ultimative SQL-, Power BI-, Fabric- und AI-communitygeführte Ereignis. 31. März bis 2. April. Verwenden Sie den Code MSCUST für einen Rabatt von 150 USD. Die Preise steigen am 11. Februar.