Skip to content
Natuurondernemer
    décembre 28, 2020 by admin

    IN (Transact-SQL)

    IN (Transact-SQL)
    décembre 28, 2020 by admin
    • 29/08/2016
    • 4 minutes de lecture
      • c
      • j
      • r
      • M
      • i
      • +5

    S’applique à : ouiSQL Server (toutes versions prises en charge) ouiAzure SQL Database ouiAzure SQL Managed Instance ouiAzure Synapse Analytics ouiParallel Data Warehouse

    Détermine si une valeur spécifiée correspond à toute valeur dans une sous-requête ou une liste.

    Icône de lien au sujet Conventions syntaxiques Transact-SQL

    Syntaxe

    test_expression IN ( subquery | expression ) 

    Note

    Pour consulter la syntaxe Transact-SQL de SQL Server 2014 et des versions antérieures, consultez la documentation des versions antérieures.

    Arguments

    Test_expression
    Il s’agit de toute expression valide.

    Sous-requête
    Il s’agit d’une sous-requête dont le jeu de résultats est constitué d’une seule colonne. Cette colonne doit avoir le même type de données que test_expression.

    expression
    Est une liste d’expressions à tester pour une correspondance. Toutes les expressions doivent être du même type que test_expression.

    Types de résultat

    Booléen

    Valeur du résultat

    Si la valeur de test_expression est égale à toute valeur renvoyée par subquery ou est égale à toute expression de la liste séparée par des virgules, la valeur du résultat est VRAIE ; sinon, la valeur du résultat est FAUX.

    L’utilisation de NOT IN annule la valeur de la sous-requête ou l’expression.

    Attention

    Toutes les valeurs nulles renvoyées par la sous-requête ou l’expression qui sont comparées à test_expression en utilisant IN ou NOT IN renvoient UNKNOWN. L’utilisation de valeurs nulles en même temps que IN ou NOT IN peut produire des résultats inattendus.

    Remarques

    Inclure explicitement un nombre extrêmement important de valeurs (plusieurs milliers de valeurs séparées par des virgules) entre les parenthèses, dans une clause IN peut consommer des ressources et renvoyer des erreurs 8623 ou 8632. Pour contourner ce problème, stockez les éléments de la liste IN dans une table, et utilisez une sous-requête SELECT dans une clause IN.

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

    Internal error: An expression services limit has been reached. Please look for potentially complex expressions in your query, and try to simplify them.

    Exemples

    A. Comparaison de OR et IN

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

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

    Cependant, vous récupérez les mêmes résultats en utilisant 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 de l’une ou l’autre requête.

    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 trouve tous les ID des vendeurs dans la table SalesPerson pour les employés qui ont un quota de vente supérieur à 250 000 $ pour l’année, puis sélectionne dans le tableau Employee les noms de tous les employés où EmployeeID qui correspondent aux résultats de la sous-requête 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 

    Voici le jeu de 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 trouve les vendeurs qui n’ont pas un quota supérieur à 250 000 $. NOT IN trouve les vendeurs qui ne correspondent pas aux éléments de la liste de valeurs.

    -- 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 et Parallel Data Warehouse

    D. Utilisation de IN et NOT IN

    L’exemple suivant trouve toutes les entrées de la table FactInternetSales qui correspondent aux valeurs SalesReasonKey de la table DimSalesReason.

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

    L’exemple suivant trouve toutes les entrées du tableau FactInternetSalesReason qui ne correspondent pas aux valeurs SalesReasonKey du tableau DimSalesReason.

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

    F. Utilisation de IN avec une liste d’expressions

    L’exemple suivant trouve tous les ID des vendeurs dans la table DimEmployee pour les employés dont le prénom est soit Mike soit Michael.

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

    Voir aussi

    CASE (Transact-SQL)
    Expressions (Transact-SQL)
    Fonctions intégrées (Transact-.SQL)
    Opérateurs (Transact-SQL)
    SÉLECTION (Transact-SQL)
    WHERE (Transact-SQL)
    ALL (Transact-SQL)
    SOME | ANY (Transact-SQL)

    Previous articleLe mensonge de l'allaitement : comment l'allaitement m'a fait prendre du poidsNext article WMFE-FM

    Laisser un commentaire Annuler la réponse

    Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

    Articles récents

    • Comment configurer un mineur ASIC de bitcoin
    • Qu’est-ce qu’un site Superfund?
    • Les vers de sang appâtés par la pêche ont des piqûres d’abeilles
    • Echolalie : Les faits au-delà du « langage de perroquet », du script et de l’écho
    • Citations de Lord of the Flies
    • Guide du débutant pour le pegging
    • 42 Recettes de soupes à la mijoteuse saines
    • 3 risques surprenants d’une mauvaise posture
    • Biographie de Tina Fey
    • Qu’est-ce que les courants océaniques ?

    Archives

    • avril 2021
    • mars 2021
    • février 2021
    • janvier 2021
    • décembre 2020
    • novembre 2020
    • octobre 2020
    • septembre 2020
    • août 2020
    • juillet 2020
    • juin 2020
    • mai 2020
    • avril 2020
    • DeutschDeutsch
    • NederlandsNederlands
    • EspañolEspañol
    • FrançaisFrançais
    • PortuguêsPortuguês
    • ItalianoItaliano
    • PolskiPolski

    Méta

    • Connexion
    • Flux des publications
    • Flux des commentaires
    • Site de WordPress-FR
    Posterity WordPress Theme