2013-03-15 57 views
38

我看到名为LEFT OUTER JOIN或RIGHT OUTER JOIN的连接。在一些地方,我看到了LEFT JOIN或RIGHT JOIN。我对此感到困惑。左外连接和左连接相同吗?

2天前我发布了question,但我无法理解解决方案提供的链接。

这些类型的连接都是相同的,还是两者之间有一些区别?

+10

它们是相同的。 – EmCo 2013-03-15 05:57:07

+5

'LEFT JOIN'与'LEFT OUTER JOIN'相同。 'OUTER'关键字是*可选*。 – 2013-03-15 05:57:22

+0

@JW。我看到了你所建议的链接。这是非常有用的,但它仍然没有完成我所有的疑惑。 http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html – PSR 2013-03-15 05:58:33

回答

2

在MySQL语法,LEFT OUTER JOINLEFT 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可能无效。

18

他们报的第一个链接给你:

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

3

如果你看一下手册页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是可选的。

+0

@Luv - 现在最后一行对你的格式没有意义! – 2013-03-15 06:23:05

1

我在SQL Server中工作,按我的使用情况和经验,有LEFT JOINLEFT OUTER JOIN之间绝对没有区别。 RIGHT JOINRIGHT OUTER JOIN也是如此。当您在SQL Server中使用LEFT JOIN关键字时,它仅表示LEFT OUTER JOIN。 因此,根据我的意见,它的所有数据库引擎的通用规则是相同的。

see herehere