我知道加入2个表。但是,在加入3个或更多表时,我想到了以下问题。这些看似非常基本但如果有人解释的话会很棒 请注意,我已经浏览了Understanding how JOIN works when 3 or more tables are involved. [SQL]
链接 查询问题1& 2:
SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
LEFT JOIN Orders ON Customers.CustomerID=Orders.CustomerID
LEFT JOIN Regions ON Orders.RegionID = Regions.RegionID;
问题1:
LEFT JOIN Regions ON Orders.RegionID = Regions.RegionID
此连接是否发生在第一次加入的结果集上?
问题2:如果条件是:如何
LEFT JOIN Regions ON Customers.RegionID = Regions.RegionID
现在会发生什么?这个连接发生在什么结果集上?它是出现在'FROM Customers'结果集还是第一个连接结果集中?
查询问题3:
SELECT count(distinct Customers.CustomerName), count(Orders.OrderID), count(Regions.RegionID)
FROM Customers
LEFT JOIN Orders ON Customers.CustomerID=Orders.CustomerID
LEFT JOIN Regions ON Orders.RegionID = Regions.RegionID;
问题3:
如果连接顺序要反转,结果是否会有所不同?在哪种情况下会有所不同?
查询问题4:
SELECT count(Regions.RegionID)
FROM Customers
LEFT JOIN Orders ON Customers.CustomerID=Orders.CustomerID
LEFT JOIN Regions ON Orders.RegionID = Regions.RegionID;
问题4:(这是我最困惑的地方)
在聚合方面,FROM中的table_name应该是什么?它是否依赖于要聚合的table.column?
对于问题的目的,假设需要2个连接,我们只需要count(RegionID)。
答案 0 :(得分:1)
在我看来,您有三个表,这些关系:与客户和地区以及客户相关联的订单与地区相关联。
1)是的确如此 2)第二个查询将客户链接到区域,因此在您拥有订单区域(可能可能不同)之前,您拥有客户的区域。如果您愿意,您可以通过区域表中的两个连接获得两个连接,一个用于客户,一个用于订单 3)左连接改变顺序,结果可能不同。例如在您的查询中,您获得所有客户(最终也是没有订单的客户)以及可选的订单和区域。如果您有类似“...... FROM FROM LEFT JOIN customer ......”的内容,您将拥有所有地区,并最终获得订单。 4)计数会影响您的连接结果,并且可能涉及任何列,而不仅仅是用于聚合的列