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

適用対象: ○SQL Server ○Azure SQL Database ○Azure SQL Data Warehouse ○Parallel Data WarehouseAPPLIES TO: yesSQL Server yesAzure SQL Database yesAzure SQL Data Warehouse yesParallel Data Warehouse

指定された値が、サブクエリまたは一覧内の値と一致するかどうかを判断します。Determines whether a specified value matches any value in a subquery or a list.

トピック リンク アイコン Transact-SQL 構文表記規則Topic link icon Transact-SQL Syntax Conventions

構文Syntax

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

引数Arguments

test_expressiontest_expression
任意の有効なを指定します。Is any valid expression.

subquerysubquery
1 列の結果セットを返すサブクエリです。Is a subquery that has a result set of one column. この列のデータ型は、test_expression と同じデータ型である必要があります。This column must have the same data type as test_expression.

expression[ , ... n ]expression[ ,... n ]
一致するかどうかのテストに使用する式のリストです。Is a list of expressions to test for a match. すべての式は、test_expression と同じ型である必要があります。All expressions must be of the same type as test_expression.

戻り値の型Result Types

BooleanBoolean

結果の値Result Value

test_expression の値が subquery によって返される値と等しい場合、またはコンマ区切りの一覧内の任意のと等しい場合、結果の値は TRUE です。それ以外の場合、結果の値は 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.

NOT IN を使用すると、サブクエリ値またはが否定されます。Using NOT IN negates the subquery value or expression.

注意事項

IN または NOT IN を使用して test_expression と比較される subquery または expression で NULL 値が返された場合は、すべて UNKNOWN が返されます。Any null values returned by subquery or expression that are compared to test_expression using IN or NOT IN return UNKNOWN. IN または NOT IN と共に NULL 値を使用すると、予期しない結果が生じる可能性があります。Using null values in together with IN or NOT IN can produce unexpected results.

RemarksRemarks

かっこで囲んだ極端に多くの値 (コンマで区切られた数千単位の値) を IN 句に明示的に含めると、リソースが消費されてエラー 8623 または 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. この問題を回避するには、項目をテーブルの IN リストに格納し、IN 句内に SELECT サブクエリを使用します。To work around this problem, store the items in the IN list in a table, and use a SELECT subquery within an IN clause.

エラー 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.

エラー 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.

使用例Examples

A.A. OR と IN を比較するComparing OR and IN

次の例では、デザイン エンジニア、ツール デザイナー、またはマーケティング アシスタントのいずれかである従業員の名前の一覧を選択します。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  

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  

次に各クエリの結果セットを示します。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. IN とサブクエリを使用するUsing IN with a subquery

次の例では、年間の販売ノルマが 250,000 ドルを超えるすべての販売員の ID が SalesPerson テーブルから検索され、次に、Employee テーブルから、SELECT サブクエリの結果に一致する EmployeeID の従業員の名前がすべて選択されます。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  

以下に結果セットを示します。Here is the result set.

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

C.C. NOT IN とサブクエリを使用するUsing NOT IN with a subquery

次の例では、販売ノルマが 250,000 ドル以下の販売員が検索されます。The following example finds the salespersons who do not have a quota greater than $250,000. NOT IN は、値の一覧に一致する項目がない販売員を検索します。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  

例: Azure SQL データ ウェアハウスAzure SQL Data Warehouse および Parallel Data WarehouseParallel Data WarehouseExamples: Azure SQL データ ウェアハウスAzure SQL Data Warehouse and Parallel Data WarehouseParallel Data Warehouse

D.D. IN と NOT IN の使用Using IN and NOT IN

次の例では、DimSalesReason テーブルの SalesReasonKey 値と一致する FactInternetSales テーブルのすべてのエントリを検出します。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);   

次の例では、DimSalesReason テーブルの SalesReasonKey 値と一致しない FactInternetSalesReason テーブルのすべてのエントリを検出します。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. 式リストで IN を使用するUsing IN with an expression list

次の例は、DimEmployee テーブルで、名が Mike または Michael の従業員について、営業担当者の ID をすべて検出します。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');  

参照See Also

CASE (Transact-SQL) CASE (Transact-SQL)
式 (Transact-SQL) Expressions (Transact-SQL)
組み込み関数 (Transact-SQL) Built-in Functions (Transact-SQL)
演算子 (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)