ヒント (Transact-SQL) - JoinHints (Transact-SQL) - Join

適用対象:Applies to: はいSQL ServerSQL Server (サポートされているすべてのバージョン) yesSQL ServerSQL Server (all supported versions) はいAzure SQL データベースAzure SQL DatabaseYesAzure SQL データベースAzure SQL Database適用対象:Applies to: はいSQL ServerSQL Server (サポートされているすべてのバージョン) yesSQL ServerSQL Server (all supported versions) はいAzure SQL データベースAzure SQL DatabaseYesAzure SQL データベースAzure SQL Database

結合ヒントにより、クエリ オプティマイザーで、SQL Server 2019 (15.x)SQL Server 2019 (15.x) の 2 つのテーブル間の結合方法を設定します。Join hints specify that the query optimizer enforce a join strategy between two tables in SQL Server 2019 (15.x)SQL Server 2019 (15.x). 結合および結合の構文に関する一般的な情報については、「FROM (Transact-SQL)」を参照してください。For general information about joins and join syntax, see FROM (Transact-SQL).

注意事項

通常、SQL ServerSQL Server クエリ オプティマイザーでは、クエリにとって最適な実行プランが選択されるため、ヒントは、経験を積んだ開発者やデータベース管理者が最後の手段としてのみ使用することをお勧めします。Because the SQL ServerSQL Server query optimizer typically selects the best execution plan for a query, we recommend that hints be used only as a last resort by experienced developers and database administrators.

適用対象:Applies to:

DELETEDELETE

SELECTSELECT

UPDATEUPDATE

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

構文Syntax

<join_hint> ::=   
     { LOOP | HASH | MERGE | REMOTE }  

注意

SQL Server 2014 以前の Transact-SQL 構文を確認するには、以前のバージョンのドキュメントを参照してください。To view Transact-SQL syntax for SQL Server 2014 and earlier, see Previous versions documentation.

引数Arguments

LOOP | HASH | MERGELOOP | HASH | MERGE
クエリ内の結合は、ループ、ハッシュ、またはマージを使用します。Specifies that the join in the query should use looping, hashing, or merging. LOOP | HASH | MERGE JOIN を使用すると、2 つのテーブル間に特定の結合が設定されます。Using LOOP |HASH | MERGE JOIN enforces a particular join between two tables. LOOP は、RIGHT または FULL と共に結合の種類として指定することはできません。LOOP cannot be specified together with RIGHT or FULL as a join type. 詳細については、結合に関するページを参照してください。For more information, see Joins.

REMOTEREMOTE
右側のテーブルのサイトで結合操作を実行します。Specifies that the join operation is performed on the site of the right table. これは、左側のテーブルがローカル テーブルで、右側のテーブルがリモート テーブルの場合に効果的です。This is useful when the left table is a local table and the right table is a remote table. REMOTE は、左側のテーブルの行数が右側のテーブルの行数よりも少ないときだけ使用します。REMOTE should be used only when the left table has fewer rows than the right table.

右側のテーブルがローカルの場合、結合はローカルで実行されます。If the right table is local, the join is performed locally. 両方のテーブルがリモート テーブルでデータ ソースは異なる場合、REMOTE の指定によって結合は右側のテーブルのサイトで実行されます。If both tables are remote but from different data sources, REMOTE causes the join to be performed on the site of the right table. 両方のテーブルが同じデータ ソースのリモート テーブルの場合、REMOTE は必要ありません。If both tables are remote tables from the same data source, REMOTE is not required.

結合述語で比較されている値のいずれかを COLLATE 句を使用して別の照合順序にキャストする場合は、REMOTE を使用できません。REMOTE cannot be used when one of the values being compared in the join predicate is cast to a different collation using the COLLATE clause.

REMOTE は、INNER JOIN 操作に対してのみ使用できます。REMOTE can be used only for INNER JOIN operations.

解説Remarks

結合ヒントは、クエリの FROM 句で指定します。Join hints are specified in the FROM clause of a query. 結合ヒントにより、2 つのテーブル間の結合方法を設定できます。Join hints enforce a join strategy between two tables. 2 つのテーブルに対して結合ヒントが指定されると、クエリ オプティマイザーは、ON キーワードの位置に基づいて、クエリ内のすべての結合テーブルに対して結合の順番を自動的に設定します。If a join hint is specified for any two tables, the query optimizer automatically enforces the join order for all joined tables in the query, based on the position of the ON keywords. ON 句を指定せずに CROSS JOIN を使用する場合は、かっこを使用して結合の順番を指定できます。When a CROSS JOIN is used without the ON clause, parentheses can be used to indicate the join order.

Examples

A.A. HASH を使用するUsing HASH

次の例では、クエリの JOIN 操作を HASH 結合によって実行することを指定します。The following example specifies that the JOIN operation in the query is performed by a HASH join. この例では、AdventureWorks2012AdventureWorks2012 データベースを使用します。The example uses the AdventureWorks2012AdventureWorks2012 database.

SELECT p.Name, pr.ProductReviewID  
FROM Production.Product AS p  
LEFT OUTER HASH JOIN Production.ProductReview AS pr  
ON p.ProductID = pr.ProductID  
ORDER BY ProductReviewID DESC;  

B.B. LOOP を使用するUsing LOOP

次の例では、クエリの JOIN 操作を LOOP 結合によって実行することを指定します。The following example specifies that the JOIN operation in the query is performed by a LOOP join. この例では、AdventureWorks2012AdventureWorks2012 データベースを使用します。The example uses the AdventureWorks2012AdventureWorks2012 database.

DELETE FROM Sales.SalesPersonQuotaHistory   
FROM Sales.SalesPersonQuotaHistory AS spqh  
    INNER LOOP JOIN Sales.SalesPerson AS sp  
    ON spqh.SalesPersonID = sp.SalesPersonID  
WHERE sp.SalesYTD > 2500000.00;  
GO  

C.C. MERGE を使用するUsing MERGE

次の例では、クエリの JOIN 操作を MERGE 結合によって実行することを指定します。The following example specifies that the JOIN operation in the query is performed by a MERGE join. この例では、AdventureWorks2012AdventureWorks2012 データベースを使用します。The example uses the AdventureWorks2012AdventureWorks2012 database.

SELECT poh.PurchaseOrderID, poh.OrderDate, pod.ProductID, pod.DueDate, poh.VendorID   
FROM Purchasing.PurchaseOrderHeader AS poh  
INNER MERGE JOIN Purchasing.PurchaseOrderDetail AS pod   
    ON poh.PurchaseOrderID = pod.PurchaseOrderID;  
GO  

参照See Also

Hints (Transact-SQL)Hints (Transact-SQL)