首页/数据/数据库速查/CROSS JOIN 与 SELF JOIN
SQL 语法52 条

CROSS JOIN 与 SELF JOIN

CROSS JOIN 是无条件笛卡尔积(慎用);SELF JOIN 是同一张表自连接,常用于层级与前后行比较。

数据库速查数据更新于 2026-10-12
用途组合与自关联
CROSS JOIN行数 = 左×右
SELF JOIN给同表起两个别名

自连接比较相邻行

自连接比较相邻行
SELECT a.id, a.value - b.value AS delta
FROM metrics a
JOIN metrics b ON b.id = a.id - 1;

生成数字序列(小型 CROSS JOIN)

生成数字序列(小型 CROSS JOIN)
SELECT d1.n + d2.n*10 + 1 AS seq
FROM (SELECT 0 n UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4
      UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) d1
CROSS JOIN (SELECT 0 n UNION SELECT 1 UNION SELECT 2) d2;
CROSS JOIN 很容易因漏写条件产生百万行中间结果,写连接务必先确认 ON。

易错点

  • CROSS JOIN 与逗号连接的语义相同,但显式 CROSS JOIN 可读性更好
  • 自连接大表无索引时成本是平方级增长

数据来源与参考

  • MySQL 8.0 Reference Manual: JOIN Clause

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌