クロス結合の使用
WHERE 句がないクロス結合では、結合に含まれるテーブルのデカルト積が生成されます。デカルト積結果セットのサイズは、最初のテーブルの行数に 2 番目のテーブルの行数を掛けた値になります。Transact-SQL クロス結合の例を次に示します。
USE AdventureWorks2008R2;
GO
SELECT p.BusinessEntityID, t.Name AS Territory
FROM Sales.SalesPerson p
CROSS JOIN Sales.SalesTerritory t
ORDER BY p.BusinessEntityID;
この結果セットには、170 行が含まれます (SalesPerson テーブルは 17 行、SalesTerritory テーブルは 10 行あるので、17 に 10 を掛けると 170 行になります)。
ただし、WHERE 句を追加した場合、クロス結合の動作は内部結合の場合と同じになります。たとえば、次の 2 つの Transact-SQL クエリでは同じ結果セットが生成されます。
USE AdventureWorks2008R2;
GO
SELECT p.BusinessEntityID, t.Name AS Territory
FROM Sales.SalesPerson p
CROSS JOIN Sales.SalesTerritory t
WHERE p.TerritoryID = t.TerritoryID
ORDER BY p.BusinessEntityID;
-- Or
USE AdventureWorks2008R2;
GO
SELECT p.BusinessEntityID, t.Name AS Territory
FROM Sales.SalesPerson p
INNER JOIN Sales.SalesTerritory t
ON p.TerritoryID = t.TerritoryID
ORDER BY p.BusinessEntityID;