【问题标题】: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。我想学习使用连接和案例编写一些复杂的查询。你可以参考一些链接吗?我看到了你的答案。它们非常吸引我。你能提供一些参考网站吗?

标签: mysql sql


【解决方案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

      【讨论】:

        猜你喜欢
        • 2017-02-26
        • 2011-10-01
        • 2016-10-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-10
        相关资源
        最近更新 更多