左外连接和左连接一样吗? [复制]
Posted
技术标签:
【中文标题】左外连接和左连接一样吗? [复制]【英文标题】:Are left outer joins and left joins the same? [duplicate] 【发布时间】:2013-03-03 18:34:42 【问题描述】:我见过称为 LEFT OUTER JOIN 或 RIGHT OUTER JOIN 的联接。在某些地方我见过 LEFT JOIN 或 RIGHT JOIN。我对此感到困惑。
我在 2 天前发布了 question ,但我无法理解解决方案提供的链接。
这些类型的连接是否都相同,或者两者之间有什么区别?
【问题讨论】:
它们是一样的。LEFT JOIN
与LEFT OUTER JOIN
相同。 OUTER
关键字是可选的。
@JW。我看到了你建议的链接。它非常有用。但它仍然没有解决我所有的疑问。 codinghorror.com/blog/2007/10/…
@JW。我还有一个问题要问你
@jw。我想学习使用连接和案例编写一些复杂的查询。你可以参考一些链接吗?我看到了你的答案。它们非常吸引我。你能提供一些参考网站吗?
【参考方案1】:
两者没有区别。 参考visual represenation of joins
【讨论】:
这篇文章太棒了!谢谢!【参考方案2】:他们引用的第一个链接给你:
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 是可选的。
【讨论】:
@Luv - 现在最后一行对您的格式没有意义! 如果它是可选的,并不意味着它什么都不做。 SQL 描述中的这个 optional 词让我很困惑。例如标准的git log
CLI 命令语法:git log [<options>] [<revision range>] [[--] <path>…]
大量可选参数。但这会对行为产生重大影响。【参考方案4】:
在 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
可能无效。
【讨论】:
【参考方案5】:我在 SQL Server 中工作,根据我的使用和经验,LEFT JOIN
和 LEFT OUTER JOIN
之间绝对没有区别。 RIGHT JOIN
和 RIGHT OUTER JOIN
也是如此。在 SQL Server 中使用 LEFT JOIN
关键字时,仅表示 LEFT OUTER JOIN
。
因此,根据我的观点,它是所有数据库引擎都相同的通用规则。
see here 和 here
【讨论】:
以上是关于左外连接和左连接一样吗? [复制]的主要内容,如果未能解决你的问题,请参考以下文章