【问题标题】:What are some good examples where SQL's OUTER JOIN is used?有哪些使用 SQL 的 OUTER JOIN 的好例子?
【发布时间】:2011-02-11 12:02:28
【问题描述】:

我经常在面试中被问到“什么是 SQL 中的外连接”?

虽然可以回答,但我想知道使用(LEFT)OUTER JOIN 的一些经典和好的现实生活示例是什么?

【问题讨论】:

标签: sql join left-join outer-join


【解决方案1】:

在客户和订单表的罗斯文数据库中。

进行内部联接只会为您提供已下订单的客户。

执行外部联接将获得所有个客户和已下订单的客户的订单。

【讨论】:

    【解决方案2】:

    要添加到 Robin Day 的答案,您还可以使用 Left Outer Join 通过检查 NULL 来仅抓取未下订单的客户。

    
    SELECT *
    FROM  Customer
      LEFT OUTER JOIN Order 
        ON Customer.CustomerId = Order.CustomerId
    WHERE Order.CustomerId IS NULL
    

    【讨论】:

      【解决方案3】:

      以下是左外连接的视觉表现

      SELECT <select_list>
      FROM Table_A A
      LEFT JOIN Table_B B
      ON A.Key = B.Key
      

      在下面的文章中阅读有关联接的更多信息 http://www.codeproject.com/KB/database/Visual_SQL_Joins.aspx(必读的最佳文章之一)

      【讨论】:

        【解决方案4】:

        当您想要一个表中的所有记录以及另一个表中的记录(如果有)时,可以使用LEFT OUTER JOIN

        例如,给定表 UserAddress,其中 AddressUser 有一个 FK,每个用户可能有 0 个或多个地址:

        select *
        from User u
        left outer join Address a on u.UserID = a.UserID
        

        这将确保您获得所有 User 记录,无论是否存在相应的 Address 记录。

        如果您想显示所有没有地址的用户,您可以这样做:

        select *
        from User u
        left outer join Address a on u.UserID = a.UserID
        where a.UserID is null
        

        【讨论】:

          【解决方案5】:

          经典的例子是客户和订单。有些客户有订单,有些则没有。您想显示总销售额的客户列表。所以你做一个从客户到订单的左外连接并得到:

          客户 A:100 美元; 客户 B:0 美元; 客户 C:500 美元

          代替:

          客户 A:100 美元; 客户 C:500 美元

          【讨论】:

            【解决方案6】:

            这是一个例子:

            我需要所有客户的列表,连同他们的优惠券,我还需要从未使用过优惠券的客户。

            SELECT *
            FROM Customer
            LEFT OUTER JOIN Voucher
             ON Customer.CustomerId = Voucher.CustomerId
            

            【讨论】:

              【解决方案7】:

              获取所有客户的列表,包括他们所下订单的任何详细信息。有些客户可能没有下订单,因此 INNER JOIN 会将他们排除在此列表之外。

              SELECT
                  *
              FROM
                  Customer
              LEFT OUTER JOIN
                  Order
              ON
                  Customer.CustomerId = Order.CustomerId
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2013-03-07
                • 1970-01-01
                • 2014-08-10
                • 1970-01-01
                • 2011-01-30
                • 2010-09-29
                • 2019-04-01
                相关资源
                最近更新 更多