119

是否可以在没有语句的情况下编写连接查询ON?以及这些连接有何不同LEFT JOIN, RIGHT JOIN的工作方式。

4

3 回答 3

176

MySQL文档涵盖了这个主题。

这是一个概要。使用joinorinner join时,on条件是可选的。这不同于 ANSI 标准,也不同于几乎任何其他数据库。效果是一个cross join。同样,您可以使用带有 的on子句cross join,这也与标准 SQL 不同。

交叉连接创建一个笛卡尔积——即第一个表中的 1 行和第二个表中的 1 行的所有可能组合。具有三行('a'、'b' 和 'c')的表和具有四行(例如 1、2、3、4)的表的交叉连接将有 12 行。

在实践中,如果要进行交叉连接,请使用cross join

from A cross join B

比:

from A, B

和:

from A join B -- with no on clause

右外连接或左外连接需要该on子句,因此讨论与它们无关。

于 2013-05-09T21:17:29.123 回答
13

请参阅http://www.sitepoint.com/understanding-sql-joins-mysql-database/中的一些示例

您可以在查询中使用“USING”而不是“ON”

SELECT * FROM table1 LEFT JOIN table2 USING (id);
于 2013-10-30T10:35:57.370 回答
0

有几种方法可以进行交叉连接或笛卡尔积:

SELECT column_names FROM table1 CROSS JOIN table2;

SELECT column_names FROM table1, table2;

SELECT column_names FROM table1 JOIN table2;

在第三种情况下忽略on条件是导致交叉连接的原因。

于 2020-12-02T01:16:39.913 回答