是否可以在没有 ON
语句的情况下编写连接查询?以及这些联接有何不同 LEFT JOIN, RIGHT JOIN
的工作原理。
ON
子句告诉服务器这些表是如何相关的,不。如果您不同的连接类型都给出相同的结果,那么您在某种程度上做错了,添加一些代码可以帮助我们发现您的问题。同时,前往 Jeff Atwood's blog 进行 2 分钟的不同联接类型介绍。
MySQL documentation 涵盖了这个主题。
这是一个概要。使用 join
或 inner 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
子句,因此讨论与它们无关。
请参阅 http://www.sitepoint.com/understanding-sql-joins-mysql-database/ 中的一些示例
您可以在查询中使用“USING”而不是“ON”
SELECT * FROM table1 LEFT JOIN table2 USING (id);
有几种方法可以进行交叉连接或笛卡尔积:
SELECT column_names FROM table1 CROSS JOIN table2;
SELECT column_names FROM table1, table2;
SELECT column_names FROM table1 JOIN table2;
在第三种情况下忽略 on
条件会导致交叉连接。
不定期副业成功案例分享