IN (Transact-SQL)

Mis à jour : 5 décembre 2005

Détermine si une valeur donnée correspond à la valeur d'une liste ou d'une sous-requête.

Icône Lien de rubriqueConventions de syntaxe de Transact-SQL

Syntaxe

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

Arguments

  • subquery
    Sous-requête dont l'ensemble de résultats est une colonne. Cette colonne doit avoir le même type de données que test_expression.
  • expression[ ,... n ]
    Liste d'expressions utilisée pour vérifier une correspondance. Toutes les expressions doivent avoir le même type de données que test_expression.

Types de résultats

Boolean

Valeur des résultats

Si la valeur de test_expression est égale à une valeur retournée par subquery ou à l'un des arguments expression de la liste séparée par des virgules, le résultat est TRUE. Dans le cas contraire, ce résultat est FALSE.

L'utilisation de NOT IN retourne la valeur inverse de subquery ou expression.

ms177682.Caution(fr-fr,SQL.90).gifAttention :
Toute valeur NULL retournée par subquery ou expression qui est comparée à test_expression en utilisant IN ou NOT IN retourne UNKNOWN. L'utilisation de valeurs NULL avec IN ou NOT IN peut produire des résultats inattendus.

Exemples

A. Comparaison de OR et IN

L'exemple suivant sélectionne une liste des noms d'employés qui sont ingénieurs concepteurs, concepteurs d'outils ou assistants marketing.

USE AdventureWorks;
GO
SELECT FirstName, LastName, e.Title
FROM HumanResources.Employee AS e
    JOIN Person.Contact AS c 
    ON e.ContactID = c.ContactID
WHERE e.Title = 'Design Engineer' 
   OR e.Title = 'Tool Designer' 
   OR e.Title = 'Marketing Assistant';
GO

Vous obtenez toutefois les mêmes résultats en utilisant IN.

USE AdventureWorks;
GO
SELECT FirstName, LastName, e.Title
FROM HumanResources.Employee AS e
    JOIN Person.Contact AS c 
    ON e.ContactID = c.ContactID
WHERE e.Title IN ('Design Engineer', 'Tool Designer', 'Marketing Assistant');
GO

Voici l'ensemble de résultats obtenu pour l'une ou l'autre des requêtes.

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. Utilisation de IN avec une sous-requête

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 EmployeeID correspond aux résultats issus de la sous-requête SELECT.

USE AdventureWorks;
GO
SELECT FirstName, LastName
FROM Person.Contact AS c
    JOIN HumanResources.Employee AS e
    ON e.ContactID = c.ContactID
WHERE EmployeeID IN
   (SELECT SalesPersonID
   FROM Sales.SalesPerson
   WHERE SalesQuota > 250000);
GO

Voici l'ensemble des résultats.

FirstName   LastName                                           
---------   -------- 
Tsvi         Reiter                                            
Michael      Blythe                                            
Tete         Mensa-Annan                                       

(3 row(s) affected)

C. Utilisation de NOT IN avec une sous-requête

L'exemple suivant recherche les vendeurs dont le quota de ventes est supérieur à $ 250 000. NOT IN identifie les vendeurs qui ne correspondent pas aux éléments de la liste de valeurs.

USE AdventureWorks
GO
SELECT FirstName, LastName
FROM Person.Contact AS c
    JOIN HumanResources.Employee AS e
    ON e.ContactID = c.ContactID
WHERE EmployeeID NOT IN
   (SELECT SalesPersonID
   FROM Sales.SalesPerson
   WHERE SalesQuota > 250000)
GO

Voir aussi

Référence

CASE (Transact-SQL)
Expressions (Transact-SQL)
Fonctions (Transact-SQL)
Opérateurs (Transact-SQL)
SELECT (Transact-SQL)
WHERE (Transact-SQL)
ALL (Transact-SQL)
SOME | ANY (Transact-SQL)

Autres ressources

Principes de base des sous-requêtes
Sous-requêtes introduites par IN
Opérateurs de comparaison modifiés par ANY, SOME ou ALL

Aide et Informations

Assistance sur SQL Server 2005

Historique des modifications

Version Historique

5 décembre 2005

Nouveau contenu :
  • Un avertissement a été ajouté concernant l'utilisation de IN ou NOT IN avec des valeurs NULL.