Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
SQL Analytics-eindpunt in Microsoft Fabric
Magazijn in Microsoft Fabric
SQL-database in Microsoft Fabric Preview
Bepaalt of een opgegeven waarde overeenkomt met een waarde in een subquery of een lijst.
Transact-SQL syntaxis-conventies
Syntax
test_expression [ NOT ] IN
( subquery | expression [ ,...n ]
)
Arguments
test_expression
Is een geldige expressie.
subquery
Is een subquery met een resultatenset van één kolom. Deze kolom moet hetzelfde gegevenstype hebben als test_expression.
expression[ ,... n ]
Is een lijst met expressies die moeten worden getest op een overeenkomst. Alle expressies moeten van hetzelfde type zijn als test_expression.
Result Types
Boolean
Result Value
Als de waarde van test_expression gelijk is aan een waarde die wordt geretourneerd door subquery of gelijk is aan een expressie uit de door komma's gescheiden lijst, is de resultaatwaarde WAAR; anders is de resultaatwaarde FALSE.
Als u NOT IN gebruikt, wordt de subquerywaarde of -expressie genegeerd.
Caution
Null-waarden die worden geretourneerd door subquery of expressie die worden vergeleken met test_expression met BEHULP van IN of NOT IN return UNKNOWN. Het gebruik van null-waarden in combinatie met IN of NIET IN kan onverwachte resultaten opleveren.
Remarks
Expliciet een extreem groot aantal waarden (veel duizenden waarden gescheiden door komma's) tussen de haakjes opnemen, kan in een IN-component resources verbruiken en fouten retourneren 8623 of 8632. Als u dit probleem wilt omzeilen, slaat u de items op in de lijst IN in een tabel en gebruikt u een SELECT-subquery binnen een IN-component.
Error 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.
Error 8632:
Internal error: An expression services limit has been reached. Please look for potentially complex expressions in your query, and try to simplify them.
Examples
A. OR en IN vergelijken
In het volgende voorbeeld wordt een lijst geselecteerd met de namen van werknemers die ontwerptechnici, toolontwerpers of marketingassistenten zijn.
-- 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
U haalt echter dezelfde resultaten op met behulp van IN.
-- 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
Hier volgt de resultatenset van een van beide query's.
FirstName LastName Title
--------- --------- ---------------------
Sharon Salavaria Design Engineer
Gail Erickson Design Engineer
Jossef Goldberg Design Engineer
Janice Galvin Tool Designer
Thierry D'Hers Tool Designer
Wanida Benshoof Marketing Assistant
Kevin Brown Marketing Assistant
Mary Dempsey Marketing Assistant
(8 row(s) affected)
B. IN gebruiken met een subquery
In het volgende voorbeeld vindt u alle id's voor de verkopers in de SalesPerson tabel voor werknemers met een verkoopquotum dat groter is dan $ 250.000 voor het jaar en selecteert u vervolgens in de Employee tabel de namen van alle werknemers die EmployeeID overeenkomen met de resultaten van de SELECT subquery.
-- 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
Hier is het resultatenoverzicht.
FirstName LastName
--------- --------
Tsvi Reiter
Michael Blythe
Tete Mensa-Annan
(3 row(s) affected)
C. NOT IN gebruiken met een subquery
In het volgende voorbeeld worden de verkopers gevonden die geen quotum van meer dan $ 250.000 hebben.
NOT IN zoekt de verkopers die niet overeenkomen met de items in de lijst met waarden.
-- 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
Voorbeelden: Azure Synapse Analytics and Analytics Platform System (PDW)
D. IN en NIET IN gebruiken
In het volgende voorbeeld worden alle vermeldingen in de FactInternetSales tabel gevonden die overeenkomen met SalesReasonKey waarden in de DimSalesReason tabel.
-- Uses AdventureWorks
SELECT * FROM FactInternetSalesReason
WHERE SalesReasonKey
IN (SELECT SalesReasonKey FROM DimSalesReason);
In het volgende voorbeeld worden alle vermeldingen in de FactInternetSalesReason tabel gevonden die niet overeenkomen met SalesReasonKey waarden in de DimSalesReason tabel.
-- Uses AdventureWorks
SELECT * FROM FactInternetSalesReason
WHERE SalesReasonKey
NOT IN (SELECT SalesReasonKey FROM DimSalesReason);
E. IN gebruiken met een expressielijst
In het volgende voorbeeld vindt u alle id's voor de verkopers in de DimEmployee tabel voor werknemers die een voornaam hebben die een Mike van Michaelbeide of .
-- Uses AdventureWorks
SELECT FirstName, LastName
FROM DimEmployee
WHERE FirstName IN ('Mike', 'Michael');
See Also
CASE (Transact-SQL)
Expressions (Transact-SQL)
Ingebouwde functies (Transact-SQL)
Operators (Transact-SQL)
SELECT (Transact-SQL)
WHERE (Transact-SQL)
ALL (Transact-SQL)
SOMMIGE | ANY (Transact-SQL)