【发布时间】:2015-01-10 16:32:40
【问题描述】:
我真的对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
在同一个查询中,我将 Left Outer Join Join 替换为 RIght Outer 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
我真的很困惑。请向我解释这里发生了什么。可能是因为我没有正确完成加入。如果我错了,请纠正我。
谢谢你
【问题讨论】:
-
如果您无法证明对连接的理解,我很难理解 您 所说的“我知道所有连接的定义”是什么意思。
-
我将编辑那部分 @Damien_The_Unbeliever
-
Left表是在 from 子句中定义的表。Select * from student left join locker...将返回有或没有分配储物柜的学生。您的查询返回所有客户,无论他们是否有 SalesOrderheader -
你能至少解释一下,我在哪里做错了这个查询?它没有解释为什么当我使用 RIGHT OUTER JOIN 时,它的行为就像一个内部 Join=。请向我解释@Damien_The_Unbeliever
标签: sql-server tsql join adventureworks