SQL内部加入混乱

时间:2014-03-31 00:39:31

标签: sql sql-server join left-join outer-join

我对某个例子感到有些困惑。

我应该列出所有订单及其相应的详细信息。

这就是我正在做的事情:

SELECT *
    FROM Orders 
    LEFT OUTER JOIN [Order Details]
    ON Orders.OrderID=[Order Details].OrderID;

这给出了行数= 2155.

现在问题是,Orders表中的行数是830 ...左外连接如何创建更多行?

根据左外连接的定义,将获取左表中的所有行,并添加第二个表中的匹配记录。

我检查了订单明细表中的行数。即2155.

为什么左外连接使用Order Details表中的所有行?

2 个答案:

答案 0 :(得分:2)

LEFT JOIN获取您在联接左侧定义的表中的所有详细信息,并匹配右表中的记录。

如果不匹配,则右表的所有列都具有NULL值。

如果匹配,则返回右表中的所有匹配记录。如果你的关系是1对多(如你的情况),那就意味着左表中每个记录的右表可能会返回多条记录。

答案 1 :(得分:0)

LEFT OUTER JOIN将匹配右表中的所有记录,就像INNER JOIN一样。区别在于LEFT JOIN将保留左表中的记录,右表中没有匹配。

在这种情况下,[ORDER DETAILS]中的所有记录在ORDERS中都有相应的条目,这就是记录总数与ORDER DETAILS中的行数匹配的原因

根据表格描述,这正是您想要的。没有ORDER的订单详细信息将是一个更严重的问题。