我对RIGHT OUTER JOINs
和LEFT 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
我真的很困惑。请向我解释一下发生了什么。可能是因为我还没有正确完成连接。如果我错了,请纠正我。
谢谢你
答案 0 :(得分:4)
如果JOIN
查找匹配所有行,则为是,它看起来像INNER JOIN
。联接的OUTER
部分是关于无法找到匹配时发生的事情。
LEFT
或RIGHT
说明我们总是要保留哪些表格的行。因此,在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