IN (Transact-SQL)IN (Transact-SQL)

S’APPLIQUE À : OuiSQL Server OuiAzure SQL Database OuiAzure Synapse Analytics (SQL DW) OuiParallel Data Warehouse APPLIES TO: YesSQL Server YesAzure SQL Database YesAzure Synapse Analytics (SQL DW) YesParallel Data Warehouse

Détermine si une valeur donnée correspond à la valeur d'une liste ou d'une sous-requête.Determines whether a specified value matches any value in a subquery or a list.

Icône Lien de rubrique Conventions de la syntaxe Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SyntaxeSyntax

test_expression [ NOT ] IN   
    ( subquery | expression [ ,...n ]  
    )   

ArgumentsArguments

test_expressiontest_expression
Toute expression valide.Is any valid expression.

subquerysubquery
Sous-requête avec un jeu de résultats d'une colonne.Is a subquery that has a result set of one column. Cette colonne doit avoir le même type de données que test_expression.This column must have the same data type as test_expression.

expression[ , ... n ]expression[ ,... n ]
Liste d'expressions utilisée pour vérifier une correspondance.Is a list of expressions to test for a match. Toutes les expressions doivent avoir le même type de données que test_expression.All expressions must be of the same type as test_expression.

Types des résultatsResult Types

BooléenBoolean

Valeur des résultatsResult Value

Si la valeur de test_expression est égale à une valeur retournée par la sous-requête ou à l’une des expressions de la liste séparée par des virgules, le résultat est TRUE. Dans le cas contraire, ce résultat est FALSE.If the value of test_expression is equal to any value returned by subquery or is equal to any expression from the comma-separated list, the result value is TRUE; otherwise, the result value is FALSE.

L’utilisation de NOT IN inverse la valeur de la sous-requête ou l’expression.Using NOT IN negates the subquery value or expression.

Attention

Toute valeur Null retournée par la sous-requête ou l’expression comparée à test_expression en utilisant IN ou NOT IN retourne UNKNOWN.Any null values returned by subquery or expression that are compared to test_expression using IN or NOT IN return UNKNOWN. L'utilisation de valeurs Null avec IN ou NOT IN peut produire des résultats inattendus.Using null values in together with IN or NOT IN can produce unexpected results.

NotesRemarks

Incluant explicitement un très grand nombre de valeurs (plusieurs milliers de valeurs séparées par des virgules) entre parenthèses, une clause IN peut consommer des ressources et retourner des erreurs 8623 ou 8632.Explicitly including an extremely large number of values (many thousands of values separated by commas) within the parentheses, in an IN clause can consume resources and return errors 8623 or 8632. Pour contourner ce problème, stockez les éléments dans la liste IN dans une table et utilisez une sous-requête SELECT dans une clause IN.To work around this problem, store the items in the IN list in a table, and use a SELECT subquery within an IN clause.

Error 8623 :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.

Erreur 8632 :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.

ExemplesExamples

R.A. Comparaison des opérateurs OR et INComparing OR and IN

L'exemple suivant sélectionne une liste des noms d'employés qui sont ingénieurs concepteurs, concepteurs d'outils ou assistants marketing.The following example selects a list of the names of employees who are design engineers, tool designers, or marketing assistants.

-- 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  

Vous obtenez toutefois les mêmes résultats en utilisant IN.However, you retrieve the same results by using 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  

Voici le jeu de résultats obtenu pour l'une ou l'autre des requêtes.Here is the result set from either query.

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.B. Utilisation de l'opérateur IN avec une sous-requêteUsing IN with a subquery

L'exemple suivant recherche tous les ID des vendeurs dans la table SalesPerson pour les employés dont le quota de ventes annuel est supérieur à 250 000 $. Il sélectionne ensuite, dans la table Employee, les noms de tous les employés dont l'EmployeeID correspond aux résultats issus de la sous-requête SELECT.The following example finds all IDs for the salespeople in the SalesPerson table for employees who have a sales quota greater than $250,000 for the year, and then selects from the Employee table the names of all employees where EmployeeID that match the results from the 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  

Voici le jeu de résultats obtenu.Here is the result set.

FirstName   LastName                                             
---------   --------   
Tsvi         Reiter                                              
Michael      Blythe                                              
Tete         Mensa-Annan                                         
  
(3 row(s) affected)  

C.C. Utilisation de l'opérateur NOT IN avec une sous-requêteUsing NOT IN with a subquery

L'exemple suivant recherche les vendeurs qui n'ont pas de quota supérieur à 250 000 $.The following example finds the salespersons who do not have a quota greater than $250,000. NOT IN identifie les vendeurs qui ne correspondent pas aux éléments de la liste de valeurs.NOT IN finds the salespersons who do not match the items in the values list.

-- 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  

Exemples : Azure Synapse Analytics (SQL Data Warehouse)Azure Synapse Analytics (SQL Data Warehouse) et Parallel Data WarehouseParallel Data WarehouseExamples: Azure Synapse Analytics (SQL Data Warehouse)Azure Synapse Analytics (SQL Data Warehouse) and Parallel Data WarehouseParallel Data Warehouse

D.D. Utilisation des clauses IN et NOT INUsing IN and NOT IN

L’exemple suivant recherche toutes les entrées dans la table FactInternetSales qui correspondent à des valeurs SalesReasonKey dans la table DimSalesReason.The following example finds all entries in the FactInternetSales table that match SalesReasonKey values in the DimSalesReason table.

-- Uses AdventureWorks  
  
SELECT * FROM FactInternetSalesReason   
WHERE SalesReasonKey   
IN (SELECT SalesReasonKey FROM DimSalesReason);   

L’exemple suivant recherche toutes les entrées dans la table FactInternetSalesReason qui ne correspondent pas à des valeurs SalesReasonKey dans la table DimSalesReason.The following example finds all entries in the FactInternetSalesReason table that do not match SalesReasonKey values in the DimSalesReason table.

-- Uses AdventureWorks  
  
SELECT * FROM FactInternetSalesReason   
WHERE SalesReasonKey   
NOT IN (SELECT SalesReasonKey FROM DimSalesReason);  

E.E. Utilisation de la clause IN avec une liste d’expressionsUsing IN with an expression list

L’exemple suivant recherche tous les ID des vendeurs figurant dans la table DimEmployee dont le prénom est Mike ou Michael.The following example finds all IDs for the salespeople in the DimEmployee table for employees who have a first name that is either Mike or Michael.

-- Uses AdventureWorks  
  
SELECT FirstName, LastName  
FROM DimEmployee  
WHERE FirstName IN ('Mike', 'Michael');  

Voir aussiSee Also

CASE (Transact-SQL) CASE (Transact-SQL)
Expressions (Transact-SQL) Expressions (Transact-SQL)
Fonctions intégrées (Transact-SQL) Built-in Functions (Transact-SQL)
Opérateurs (Transact-SQL) Operators (Transact-SQL)
SELECT (Transact-SQL) SELECT (Transact-SQL)
WHERE (Transact-SQL) WHERE (Transact-SQL)
ALL (Transact-SQL) ALL (Transact-SQL)
SOME | ANY (Transact-SQL)SOME | ANY (Transact-SQL)