SQLPathLab
表连接 · 进阶

CROSS JOIN

生成两个表的笛卡尔积。

简介

CROSS JOIN 生成左表每一行与右表每一行的全部组合,因此结果行数等于两边行数的乘积。它适合生成日期×地区、产品×规格等完整组合,但在大表上会迅速放大数据量;如果原意是按键匹配,缺少 ON 条件通常就是错误。

基础语法

SELECT a.name, b.name FROM table_a a CROSS JOIN table_b b;

示例

CROSS JOIN 示例

示例把 table_a 的 2 行与 table_b 的 2 行组合成 4 行,用结果数量直接验证笛卡尔积。

示例数据表

表名:table_a
table_a
name
A
B
表名:table_b
table_b
name
X
Y

SQL

SELECT a.name AS a_name, b.name AS b_name FROM table_a a CROSS JOIN table_b b;

运行结果

result
a_nameb_name
A X
A Y
B X
B Y

常见问题

CROSS JOIN 会返回多少行?

在没有后续过滤时,结果行数等于两侧行数的乘积,例如 100 行与 1,000 行会产生 100,000 行。

什么场景适合主动使用 CROSS JOIN?

生成日期与门店的完整组合、测试数据或所有候选组合时很有用,但应先估算结果规模。

怎样控制笛卡尔积的成本?

先在子查询或 CTE 中过滤两侧输入,只保留必要字段,并用 LIMIT 或样例数据验证预计行数。

标签

表连接

这篇内容是否清楚?