Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro:SQL Server
Azure SQL Database
Spravovaná instance Azure SQL
Azure Synapse Analytics
Analytics Platform System (PDW)
Koncový bod analýzy SQL v Microsoft Fabric
Sklad v Microsoft Fabric
Databáze SQL v Microsoft Fabric
Určuje, zda zadaná hodnota odpovídá libovolné hodnotě v poddotazu nebo seznamu.
Syntax
test_expression [ NOT ] IN
( subquery | expression [ ,...n ]
)
Arguments
test_expression
Je libovolný platný výraz.
subquery
Je poddotaz, který má sadu výsledků jednoho sloupce. Tento sloupec musí mít stejný datový typ jako test_expression.
výraz[ ,... n ]
Je seznam výrazů k otestování shody. Všechny výrazy musí být stejného typu jako test_expression.
Typy výsledků
Boolean
Hodnota výsledku
Pokud je hodnota test_expression rovna jakékoli hodnotě vrácené poddotazem nebo je rovna libovolnému výrazu ze seznamu odděleného čárkami, výsledná hodnota je PRAVDA; jinak je výsledná hodnota NEPRAVDA.
Funkce NOT IN neguje hodnotu nebo výrazpoddotaz.
Caution
Všechny hodnoty null vrácené poddotazem nebo výrazem , které se porovnávají s test_expression pomocí funkce IN nebo NOT IN return UNKNOWN. Použití hodnot null společně s hodnotou IN nebo NOT IN může vést k neočekávaným výsledkům.
Remarks
Explicitní zahrnutí extrémně velkého počtu hodnot (mnoho tisíc hodnot oddělených čárkami) v závorkách může v klauzuli IN využívat prostředky a vracet chyby 8623 nebo 8632. Chcete-li tento problém vyřešit, uložte položky v seznamu IN v tabulce a použijte poddotaz SELECT v klauzuli IN.
Chyba 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.
Chyba 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. Porovnání OR a IN
Následující příklad vybere seznam zaměstnanců, kteří jsou návrháři návrhu, návrháři nástrojů nebo marketingoví asistenti.
-- 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
Pomocí funkce IN však načtete stejné výsledky.
-- 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
Tady je sada výsledků z libovolného dotazu.
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. Použití in s poddotazem
Následující příklad najde všechna ID prodejců v SalesPerson tabulce pro zaměstnance, kteří mají kvótu prodeje větší než 250 000 USD za rok, a pak vybere z Employee tabulky jména všech zaměstnanců, kteří EmployeeID odpovídají výsledkům poddotazů SELECT .
-- 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
Tady je soubor výsledků.
FirstName LastName
--------- --------
Tsvi Reiter
Michael Blythe
Tete Mensa-Annan
(3 row(s) affected)
C. Použití funkce NOT IN s poddotazem
Následující příklad najde prodejce, kteří nemají kvótu větší než 250 000 USD.
NOT IN najde prodejce, kteří neodpovídají položkám v seznamu hodnot.
-- 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
Příklady: Azure Synapse Analytics a Analytický platformový systém (PDW)
D. Použití IN a NOT IN
Následující příklad najde všechny položky v FactInternetSales tabulce, které odpovídají SalesReasonKey hodnotám DimSalesReason v tabulce.
-- Uses AdventureWorks
SELECT * FROM FactInternetSalesReason
WHERE SalesReasonKey
IN (SELECT SalesReasonKey FROM DimSalesReason);
Následující příklad najde všechny položky v FactInternetSalesReason tabulce, které neodpovídají SalesReasonKey hodnotám DimSalesReason v tabulce.
-- Uses AdventureWorks
SELECT * FROM FactInternetSalesReason
WHERE SalesReasonKey
NOT IN (SELECT SalesReasonKey FROM DimSalesReason);
E. Použití funkce IN se seznamem výrazů
Následující příklad najde všechna ID prodejců v DimEmployee tabulce pro zaměstnance, kteří mají křestní jméno, které je buď Mike nebo Michael.
-- Uses AdventureWorks
SELECT FirstName, LastName
FROM DimEmployee
WHERE FirstName IN ('Mike', 'Michael');
Viz také
PŘÍPAD (Transact-SQL)
Výrazy (Transact-SQL)
Předdefinované funkce (Transact-SQL)
Operátory (Transact-SQL)
SELECT (Transact-SQL)
KDE (Transact-SQL)
VŠICHNI (Transact-SQL)
NĚKTERÉ | ANY (Transact-SQL)