我对某个例子感到有些困惑。
我应该列出所有订单及其相应的详细信息。
这就是我正在做的事情:
SELECT *
FROM Orders
LEFT OUTER JOIN [Order Details]
ON Orders.OrderID=[Order Details].OrderID;
这给出了行数= 2155.
现在问题是,Orders表中的行数是830 ...左外连接如何创建更多行?
根据左外连接的定义,将获取左表中的所有行,并添加第二个表中的匹配记录。
我检查了订单明细表中的行数。即2155.
为什么左外连接使用Order Details表中的所有行?
答案 0 :(得分:2)
LEFT JOIN
获取您在联接左侧定义的表中的所有详细信息,并匹配右表中的记录。
如果不匹配,则右表的所有列都具有NULL值。
如果匹配,则返回右表中的所有匹配记录。如果你的关系是1对多(如你的情况),那就意味着左表中每个记录的右表可能会返回多条记录。
答案 1 :(得分:0)
LEFT OUTER JOIN将匹配右表中的所有记录,就像INNER JOIN一样。区别在于LEFT JOIN将保留左表中的记录,右表中没有匹配。
在这种情况下,[ORDER DETAILS]中的所有记录在ORDERS中都有相应的条目,这就是记录总数与ORDER DETAILS中的行数匹配的原因
根据表格描述,这正是您想要的。没有ORDER的订单详细信息将是一个更严重的问题。