使用交叉联接
交叉联接就是两个表的笛卡尔乘积。 你可以使用 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;