使用交叉联接

更新日期: 2006 年 4 月 14 日

没有 WHERE 子句的交叉联接将产生联接所涉及的表的笛卡尔积。第一个表的行数乘以第二个表的行数等于笛卡尔积结果集的大小。下面的示例显示了 Transact-SQL 交叉联接。

USE AdventureWorks;
GO
SELECT p.SalesPersonID, t.Name AS Territory
FROM Sales.SalesPerson p
CROSS JOIN Sales.SalesTerritory t
ORDER BY p.SalesPersonID;

结果集包含 170 行(SalesPerson 具有 17 行,SalesTerritory 具有 10 行,17 乘以 10 等于 170)。

但是,如果添加了 WHERE 子句,则交叉联接的行为将与内部联接行为相似。例如,以下 Transact-SQL 查询生成相同的结果集。

USE AdventureWorks;
GO
SELECT p.SalesPersonID, t.Name AS Territory
FROM Sales.SalesPerson p
CROSS JOIN Sales.SalesTerritory t
WHERE p.TerritoryID = t.TerritoryID
ORDER BY p.SalesPersonID;

-- Or

USE AdventureWorks;
GO
SELECT p.SalesPersonID, t.Name AS Territory
FROM Sales.SalesPerson p
INNER JOIN Sales.SalesTerritory t
ON p.TerritoryID = t.TerritoryID
ORDER BY p.SalesPersonID;

请参阅

概念

在表达式中使用运算符

其他资源

WHERE (Transact-SQL)
SELECT (Transact-SQL)
运算符 (Transact-SQL)
SELECT 示例 (Transact-SQL)

帮助和信息

获取 SQL Server 2005 帮助

更改历史记录

版本 历史记录

2006 年 4 月 14 日

已更改的内容:
  • 更改了使用不同表的示例。