左外连接和左连接一样吗? [复制]

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 JOINLEFT 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 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 可能无效。

【讨论】:

【参考方案5】:

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

see here 和 here

【讨论】:

以上是关于左外连接和左连接一样吗? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

左连接和左外连接有啥区别? [复制]

LINQ to SQL 执行联合和左外连接

左外连接右外连接内连接全连接的概念

添加 2 表条件时,Oracle 左外连接停止返回结果

如何在 Linq 中执行左外连接? [复制]

带条件sql的左外连接