使用交叉联接

已完成

交叉联接就是两个表的笛卡尔乘积。 你可以使用 ANSI SQL-89 语法,通过省略连接两个表的筛选器来创建交叉联接。 使用 ANSI-92 语法会有点困难;这很好,因为一般来说,交叉联接并不是你通常想要的。 使用 ANSI-92 语法,不太可能意外出现交叉联接。

要显式创建笛卡尔乘积,请使用 CROSS JOIN 运算符。

此运算会创建包含输入行的所有可能组合的结果集:

SELECT <select_list>
FROM table1 AS t1
CROSS JOIN table2 AS t2;

虽然此结果通常不是所需的输出,但是编写显式的 CROSS JOIN 还是有以下一些实际应用:

  • 创建数字表,范围内的每个可能值均用一行表示。
  • 生成大量数据以进行测试。 当与自身进行交叉联接时,一个只有 100 行的表可以轻松生成 10,000 个输出行,而你几乎不需要执行任何操作。

CROSS JOIN 语法

使用 CROSS JOIN 编写查询时,请考虑以下准则:

  • 没有执行行匹配,因此不使用 ON 子句。 (将 ON 子句与 CROSS JOIN 一起使用是错误的。)
  • 要使用 ANSI SQL-92 语法,请使用 CROSS JOIN 运算符分隔输入表名称。

以下查询是使用 CROSS JOIN 创建员工和产品的所有组合的示例:

SELECT emp.FirstName, prd.Name
FROM HR.Employee AS emp
CROSS JOIN Production.Product AS prd;