使用交叉聯結

未包含 WHERE 子句的交叉聯結將產生聯結所牽涉之資料表的笛卡兒乘積 (Cartesian Product)。Cartesian 乘積結果集的大小為第一個資料表的資料列數乘以第二個資料表的資料列數。下列範例顯示 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 子句,交叉聯結的運作模式將和內部聯結一樣。例如,下列 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;