Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Punkt końcowy analizy SQL w usłudze Microsoft Fabric
Hurtownia danych w usłudze Microsoft Fabric
Baza danych SQL w usłudze Microsoft Fabric
Określa, czy określona wartość jest zgodna z dowolną wartością w podzapytaniu, czy na liście.
Transact-SQL konwencje składni
Syntax
test_expression [ NOT ] IN
( subquery | expression [ ,...n ]
)
Arguments
test_expression
Jest dowolnym prawidłowym wyrażeniem.
subquery
Jest podzapytaniem zawierającym zestaw wyników jednej kolumny. Ta kolumna musi mieć ten sam typ danych co test_expression.
wyrazu twarzy[ ,... n ]
To lista wyrażeń do przetestowania pod kątem dopasowania. Wszystkie wyrażenia muszą być tego samego typu co test_expression.
Typy wyników
Boolean
Wartość wyniku
Jeśli wartość test_expression jest równa dowolnej wartości zwracanej przez podzapytanie lub jest równa dowolnemu wyrażeniu z listy rozdzielanej przecinkami, wartość wyniku ma wartość TRUE; w przeciwnym razie wartość wyniku to FALSE.
Użycie funkcji NOT IN neguje wartość lub wyrażeniepodzapytania.
Caution
Wszystkie wartości null zwracane przez podzapytania lub wyrażenie , które są porównywane z test_expression przy użyciu funkcji IN lub NOT IN zwracane nieznane. Użycie wartości null w połączeniu z in lub NOT IN może spowodować nieoczekiwane wyniki.
Remarks
Jawne uwzględnienie bardzo dużej liczby wartości (wiele tysięcy wartości rozdzielonych przecinkami) w nawiasach w klauzuli IN może zużywać zasoby i zwracać błędy 8623 lub 8632. Aby obejść ten problem, zapisz elementy na liście IN w tabeli i użyj podzapytania SELECT w klauzuli IN.
Błąd 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.
Błąd 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. Porównywanie or i IN
Poniższy przykład wybiera listę nazwisk pracowników, którzy są inżynierami projektowymi, projektantami narzędzi lub asystentami marketingu.
-- 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
Jednak te same wyniki są pobierane przy użyciu metody 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
Oto zestaw wyników z dowolnego zapytania.
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. Używanie metody IN z podzapytaniem
W poniższym przykładzie znaleziono wszystkie identyfikatory dla sprzedawców w SalesPerson tabeli dla pracowników, którzy mają limit przydziału sprzedaży większy niż 250 000 USD za rok, a następnie wybiera z Employee tabeli nazwy wszystkich pracowników, gdzie EmployeeID pasują do wyników z SELECT podzapytania.
-- 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
Oto zestaw wyników.
FirstName LastName
--------- --------
Tsvi Reiter
Michael Blythe
Tete Mensa-Annan
(3 row(s) affected)
C. Używanie funkcji NOT IN z podzapytaniem
W poniższym przykładzie znajdują się sprzedawcy, którzy nie mają limitu przydziału większego niż 250 000 USD.
NOT IN znajduje sprzedawców, którzy nie są zgodni z elementami na liście wartości.
-- 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
Przykłady: Azure Synapse Analytics and Analytics Platform System (PDW)
D. Używanie funkcji IN i NOT IN
Poniższy przykład znajduje wszystkie wpisy w FactInternetSales tabeli, które pasują do SalesReasonKey wartości w DimSalesReason tabeli.
-- Uses AdventureWorks
SELECT * FROM FactInternetSalesReason
WHERE SalesReasonKey
IN (SELECT SalesReasonKey FROM DimSalesReason);
Poniższy przykład znajduje wszystkie wpisy w FactInternetSalesReason tabeli, które nie pasują do SalesReasonKey wartości w DimSalesReason tabeli.
-- Uses AdventureWorks
SELECT * FROM FactInternetSalesReason
WHERE SalesReasonKey
NOT IN (SELECT SalesReasonKey FROM DimSalesReason);
E. Używanie funkcji IN z listą wyrażeń
W poniższym przykładzie znaleziono wszystkie identyfikatory sprzedawców w DimEmployee tabeli dla pracowników, którzy mają imię lub MikeMichael.
-- Uses AdventureWorks
SELECT FirstName, LastName
FROM DimEmployee
WHERE FirstName IN ('Mike', 'Michael');
Zobacz też
SPRAWA (Transact-SQL)
Wyrażenia (Transact-SQL)
Wbudowane funkcje (Transact-SQL)
Operatory (Transact-SQL)
WYBIERZ (Transact-SQL)
GDZIE (Transact-SQL)
WSZYSCY (Transact-SQL)
NIEKTÓRE | ANY (Transact-SQL)