Skip to content
Natuurondernemer
    Dicembre 28, 2020 by admin

    IN (Transact-SQL)

    IN (Transact-SQL)
    Dicembre 28, 2020 by admin
    • 08/29/2016
    • 4 minuti per leggere
      • c
      • j
      • r
      • M
      • i
      • +5

    Si applica a: siQL Server (tutte le versioni supportate) siAzure SQL Database siAzure SQL Managed Instance siAzure Synapse Analytics siParallel Data Warehouse

    Determina se un valore specificato corrisponde a qualsiasi valore in una subquery o un elenco.

    Icona collegamento argomento Convenzioni sintassi Transact-SQL

    Sintassi

    test_expression IN ( subquery | expression ) 

    Nota

    Per vedere la sintassi Transact-SQL per SQL Server 2014 e precedenti, vedere la documentazione delle versioni precedenti.

    Argomenti

    test_expression
    È qualsiasi espressione valida.

    subquery
    È una subquery che ha un set di risultati di una colonna. Questa colonna deve avere lo stesso tipo di dati di test_expression.

    expression
    È una lista di espressioni da testare per una corrispondenza. Tutte le espressioni devono essere dello stesso tipo di test_expression.

    Tipi di risultato

    Booleano

    Valore del risultato

    Se il valore di test_expression è uguale a qualsiasi valore restituito dalla subquery o è uguale a qualsiasi espressione della lista separata da virgole, il valore del risultato è TRUE; altrimenti, il valore del risultato è FALSE.

    Utilizzando NOT IN si nega il valore della subquery o dell’espressione.

    Attenzione

    Qualsiasi valore nullo restituito dalla subquery o dall’espressione che viene confrontato con test_expression utilizzando IN o NOT IN restituisce UNKNOWN. L’utilizzo di valori nulli insieme a IN o NOT IN può produrre risultati inaspettati.

    Remarks

    Includere esplicitamente un numero estremamente grande di valori (molte migliaia di valori separati da virgole) tra le parentesi, in una clausola IN può consumare risorse e restituire errori 8623 o 8632. Per aggirare questo problema, memorizzate gli elementi della lista IN in una tabella e usate una sottoquery SELECT all’interno di una clausola IN.

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

    Errore 8632:

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

    Esempi

    A. Confronto tra OR e IN

    L’esempio seguente seleziona una lista di nomi di dipendenti che sono ingegneri di progettazione, progettisti di utensili o assistenti di 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 

    Tuttavia, si ottengono gli stessi risultati usando 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 

    Ecco il risultato di entrambe le 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. Usando IN con una subquery

    L’esempio seguente trova tutti gli ID per i venditori nella tabella SalesPerson per i dipendenti che hanno una quota di vendite maggiore di $250.000 per l’anno, e poi seleziona dalla tabella Employee i nomi di tutti i dipendenti dove EmployeeID che corrispondono ai risultati della 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 

    Ecco il set di risultati.

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

    C. Usare NOT IN con una sottoquery

    L’esempio seguente trova i venditori che non hanno una quota maggiore di $250.000. NOT IN trova i venditori che non corrispondono alle voci della lista dei valori.

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

    Esempi: Azure Synapse Analytics e Parallel Data Warehouse

    D. Utilizzo di IN e NOT IN

    L’esempio seguente trova tutte le voci nella tabella FactInternetSales che corrispondono a SalesReasonKey valori nella tabella DimSalesReason.

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

    L’esempio seguente trova tutte le voci nella tabella FactInternetSalesReason che non corrispondono ai valori SalesReasonKey nella tabella DimSalesReason.

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

    E. Utilizzo di IN con una lista di espressioni

    L’esempio seguente trova tutti gli ID per gli addetti alle vendite nella tabella DimEmployee per gli impiegati che hanno un nome che è o Mike o Michael.

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

    Vedi anche

    CASE (Transact-SQL)
    Espressioni (Transact-SQL)
    Funzioni integrate (Transact-SQL)
    Operatori (Transact-SQL)
    SELECT (Transact-SQL)
    WHERE (Transact-SQL)
    ALL (Transact-SQL)
    SOME | ANY (Transact-SQL)

    Previous articleThe Breastfeeding Lie: How Nursing Made Me Gain WeightNext article WMFE-FM

    Lascia un commento Annulla risposta

    Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

    Articoli recenti

    • Trovare se stessi (e gli altri…) negli annuari online
    • Come impostare un bitcoin ASIC miner
    • Cos’è un sito Superfund?
    • I vermi sanguigni con esca da pesca hanno morsi di api
    • Ecolalia: I fatti oltre il “parlare a pappagallo”, lo scripting e l’eco
    • Citazioni del Signore delle Mosche
    • A Beginner’s Guide to Pegging
    • 42 ricette sane di zuppa Crockpot
    • 3 rischi sorprendenti della cattiva postura
    • Pesce Betta femmina

    Archivi

    • Aprile 2021
    • Marzo 2021
    • Febbraio 2021
    • Gennaio 2021
    • Dicembre 2020
    • Novembre 2020
    • Ottobre 2020
    • Settembre 2020
    • Agosto 2020
    • Luglio 2020
    • Giugno 2020
    • Maggio 2020
    • Aprile 2020
    • DeutschDeutsch
    • NederlandsNederlands
    • EspañolEspañol
    • FrançaisFrançais
    • PortuguêsPortuguês
    • ItalianoItaliano
    • PolskiPolski

    Meta

    • Accedi
    • Feed dei contenuti
    • Feed dei commenti
    • WordPress.org
    Posterity WordPress Theme