关于mysql:在SQL中,JOIN和CROSS JOIN有什么区别?

In SQL, what's the difference between JOIN and CROSS JOIN?

之间有什么区别:

1
select t1.a1, t1.a2, t1.a3 from t1 cross join t2 where t1.a3 = t2.a1

和:

1
select t1.a1, t1.a2, t1.a3 from t1,t2 where t1.a3=t2.a1;

我可以互换使用吗?


SQL具有以下类型的联接,所有这些联接均直接来自集合论:

  • 内部联接。

    From A inner join B
    等于A


    MySQL在JOINCROSS JOIN之间没有区别。它们是相同的。

    在两个示例中,子句

    1
    WHERE t1.a3 = t2.a1

    将任何类型的联接转换为内部联接。表达此查询的标准方式是

    1
    2
    3
    SELECT t1.a1, t1.a2, t1.a3
      FROM t1
      JOIN t2 ON t1.a3 = t2.a1


    没有什么区别,尽管可以对此有所微笑。首先进行交叉联接,然后使用where子句将其转换为内部联接(至少使用第一个联接)。这种编写联接的方式已有20多年的历史了,并且在复杂的语句中容易出错。我建议使用这种新的时髦方式编写它:

    1
    2
    3
    select t1.a1, t1.a2, t1.a3
    from t1
    inner join t2 on t1.a3 = t2.a1