【问题标题】:What is the purpose (or use case) for an outer join in SQL?SQL 中外连接的目的(或用例)是什么?
【发布时间】:2010-11-09 05:40:57
【问题描述】:

外连接是否仅用于开发人员的分析?我无法找到一个用例来说明您为什么要在两个或多个不相关或不“匹配”您的选择标准的表中包含数据。

【问题讨论】:

标签: sql join outer-join


【解决方案1】:

这是一个非常好的示例列表,由 Jeff Atwood - A Visual Explanation of SQL Joins 提供,他直观地展示了 SQL 连接的新表示。

【讨论】:

  • +1 @Shadi Almosri 一张照片值千言万语。特别是如果你在学校里没有注意集合和维恩图:)
【解决方案2】:

OUTER JOIN 旨在解决您希望从主表中选择一组记录的情况,这些记录可能包含或不包含在辅助表中的相关记录。

INNER 连接将从列表中省略任何未在辅助表中表示的主记录。任何 OUTER JOIN 都保证所有合格的主记录的可见性。

【讨论】:

    【解决方案3】:

    一个示例用例是生成一份报告,显示所有客户及其购买情况。也就是说,甚至显示没有购买任何东西的客户。如果您对客户和购买进行普通连接,则报告将仅显示至少购买过一次的客户。

    【讨论】:

    • 如果您想获取两个表中存在的列中的所有行,那么唯一的方法是使用外连接是否准确?
    • 我描述的用例通常是作为左外连接完成的,您从左表(客户)中获取所有行,并从右表(购买)中获取匹配行。为保证两个表中的所有行都在结果中表示,您将使用完全外连接。
    【解决方案4】:
    【解决方案5】:

    外连接和内连接的区别主要在于外连接保留两个连接表中的每条记录,无论连接谓词是否匹配。因此,用例需要围绕了解“丢失的东西”,例如。尚未购买的客户,或缺少个人详细信息的会员。

    【讨论】:

      【解决方案6】:

      假设您有两张表,一张用于用户,一张用于资格,您希望执行一个查询,以获取所有用户的资格(如果他们有的话)。在这种情况下,您将使用外部联接来获取所有用户以及具有资格的用户。内部联接只会为您提供具有资格的用户。

      【讨论】:

        【解决方案7】:

        也许您有一个用户表和一个与其相关的地址表,因为您的用户可能选择不输入地址,或者他们可能有多个(运输、街道、邮政等)。如果您想列出所有用户,同时也显示拥有这些用户的地址,则必须对地址表使用外连接。

        【讨论】:

          【解决方案8】:

          “不匹配”的情况对于可选数据很有用。某些行存在但其他行不存在的东西。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2020-11-12
            • 2015-02-20
            • 1970-01-01
            • 2010-09-30
            • 1970-01-01
            • 1970-01-01
            • 2013-04-28
            • 1970-01-01
            相关资源
            最近更新 更多