确定JOINS右侧和左侧的表格

时间:2014-11-13 13:49:53

标签: sql-server tsql join adventureworks

我对RIGHT OUTER JOINsLEFT OUTER JOINs感到困惑。我真的很困惑如何正确使用它们。我在INNER JOIN中正确理解的唯一联接。我会问一些愚蠢的问题,但我已经问过他们,以便让我正确地理解它们。

我如何知道右侧和左侧哪个表格会出现。这是由哪个加入决定的?
我问所有这些问题,因为我正在使用AdventureWorks数据库,而我正在对下面的查询进行LEFT JOIN

Select SalesLT.Customer.CompanyName, SalesLT.SalesOrderHeader.SubTotal, SalesLT.SalesOrderHeader.TaxAmt
FROM SalesLT.Customer
LEFT OUTER JOIN  SalesLT.SalesOrderHeader
ON  SalesLT.Customer.CustomerID  = SalesLT.SalesOrderHeader.CustomerID

这是我得到的结果

A Bike Store                NULL    NULL
Progressive Sports          NULL    NULL
Advanced Bike Components    NULL    NULL
Modular Cycle Systems       NULL    NULL
Metropolitan Sports Supply  NULL    NULL
Aerobic Exercise Company    NULL    NULL
Associated Bikes            NULL    NULL
Rural Cycle Emporium        NULL    NULL
Sharp Bikes                 NULL    NULL
 Bikes and Motorbikes       NULL    NULL

在同一个查询中,我用RIght Outer Join替换了Left Outer join Join,我得到了以下结果

Professional Sales and Service  39785.3304  3182.8264
Remarkable Bike Store           6634.2961   530.7437
Bulk Discount Store             88812.8625  7105.029
Coalition Bike Company          2415.6727   193.2538
Futuristic Bikes                246.7392    19.7391
Channel Outlet                  550.386     44.0309
Aerobic Exercise Company        2137.231    170.9785
Vigorous Sports Store           1059.31     84.7448

我真的很困惑。请向我解释一下发生了什么。可能是因为我还没有正确完成连接。如果我错了,请纠正我。

谢谢你

2 个答案:

答案 0 :(得分:4)

如果JOIN查找匹配所有行,则为是,它看起来像INNER JOIN。联接的OUTER部分是关于无法找到匹配时发生的事情。

LEFTRIGHT说明我们总是要保留哪些表格的行。因此,在LEFT联接中,您将始终从联接左侧的表中获取所有行,但对于右侧没有匹配的行,我们得到{{1} }秒。对于NULL加入,我们始终从右侧的表中获取所有行。

正如我所说,如果您正在进行RIGHT连接,并且左表中的每一行在右表中至少有一个匹配的行,则结果看起来与{{1}相同}。

答案 1 :(得分:4)

归还所有有储物柜的学生

Select * from Student s 
inner join locker l on s.StudentId = l.StudentId

归还所有学生,无论他们是否有储物柜。

Select * from Student s 
left join locker l on s.StudentId = l.StudentId

归还所有拥有储物柜的学生,以及所有有储物柜的学生

Select * from Student s 
right join locker l on s.StudentId = l.StudentId