我看到名为LEFT OUTER JOIN或RIGHT OUTER JOIN的连接。在一些地方,我看到了LEFT JOIN或RIGHT JOIN。我对此感到困惑。左外连接和左连接相同吗?
2天前我发布了question,但我无法理解解决方案提供的链接。
这些类型的连接都是相同的,还是两者之间有一些区别?
我看到名为LEFT OUTER JOIN或RIGHT OUTER JOIN的连接。在一些地方,我看到了LEFT JOIN或RIGHT JOIN。我对此感到困惑。左外连接和左连接相同吗?
2天前我发布了question,但我无法理解解决方案提供的链接。
这些类型的连接都是相同的,还是两者之间有一些区别?
在MySQL语法,LEFT OUTER JOIN
和LEFT JOIN
是相同的:(来自http://dev.mysql.com/doc/refman/5.0/en/join.html)
| table_reference {LEFT|RIGHT} [OUTER] JOIN table_reference join_condition
| table_reference NATURAL [{LEFT|RIGHT} [OUTER]] JOIN table_factor
注意,OUTER
关键字是可选为LEFT/RIGHT JOIN。
LEFT和RIGHT连接都是外连接。我相信有一些SQL可能需要OUTER
关键字,但MySQL不。也就是说,有时LEFT JOIN
可能无效。
他们报的第一个链接给你:
INNER JOIN
:当有两个表在比赛中返回行。
LEFT JOIN/LEFT OUTER JOIN
:即使右表中没有匹配,也会返回左表中的所有行。
RIGHT JOIN/RIGHT OUTER JOIN
:即使左表中没有匹配,也会返回右表中的所有行。
FULL JOIN/FULL OUTER JOIN/OUTER JOIN
:当其中一个表中存在匹配项时返回行。
SELF JOIN
:用于将表连接到自身,就像该表是两个表一样,临时重命名SQL语句中的至少一个表。
CARTESIAN JOIN
:从两个或多个连接表中返回记录集的笛卡尔乘积。
self join
其实不是special join
。它只是反映了你可以自己加入表格的事实。这样做,您必须将其别名,以解决它在同一陈述中出现多次的事实。
cartesian join
可以被认为是没有限制条件的inner join
。或者您可以将inner join
视为具有附加限制(连接条件)的cartesian join
。
如果你看一下手册页JOIN您将看到以下行:
join_table:
table_reference [INNER | CROSS] JOIN table_factor [join_condition]
| table_reference STRAIGHT_JOIN table_factor
| table_reference STRAIGHT_JOIN table_factor ON conditional_expr
| table_reference {LEFT | RIGHT} [OUTER] JOIN table_reference join_condition
| table_reference NATURAL [{LEFT|RIGHT} [OUTER]] JOIN table_factor
粗线清楚地表明,该关键字OUTER是可选的。
@Luv - 现在最后一行对你的格式没有意义! – 2013-03-15 06:23:05
它们是相同的。 – EmCo 2013-03-15 05:57:07
'LEFT JOIN'与'LEFT OUTER JOIN'相同。 'OUTER'关键字是*可选*。 – 2013-03-15 05:57:22
@JW。我看到了你所建议的链接。这是非常有用的,但它仍然没有完成我所有的疑惑。 http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html – PSR 2013-03-15 05:58:33