gpt4 book ai didi

sql-server - 为什么我们不能通过交换表来使用左外连接,而是使用右外连接?

转载 作者:行者123 更新时间:2023-12-02 14:02:38 24 4
gpt4 key购买 nike

几天前,我在面试中遇到了以下问题。“什么是右外连接?”我回答说:“右外连接连接两个表并返回两个表中的匹配记录以及表 A 中的不匹配行”。面试官只是笑了,然后又问:“为什么我们使用 Right join 而不是我们可以交换表并使用 left join?”。然后我的回答是,“是的,我们可以使用”。但是,他认为“那为什么要有两个连接的概念呢?(左和右)”。这个问题我真的很困惑。请帮助我解决这个问题并纠正我对连接的理解。

最佳答案

LEFT [OUTER] JOINRIGHT [OUTER] JOIN 如果您也重新排列表格的顺序,则完全可以互换

换句话说,以下四个连接子句将产生相同的结果行:

A LEFT  JOIN B ON A.X = B.Y
B RIGHT JOIN A ON A.X = B.Y
A LEFT JOIN B ON B.Y = A.X -- switched A.X = B.Y around
B RIGHT JOIN A ON B.Y = A.X

结果完全没有区别。

这对你作为程序员来说是一个方便。

另请参阅这个问题:

这意味着这个问题的答案:

Why we use Right join rather we can swap the tables and use left join?

是这样的:

Because you wanted to use Right join instead of Left join. It may be more natural to write the SQL that way, or you just like the word RIGHT more than the word LEFT.

注意:如果您在同一个查询中混合 LEFT 和 RIGHT 连接,您可能会得到一些奇怪的结果,但您没有提到这些。

<小时/>

注意,这是语法。如果数据库引擎使用顺序来选择索引等,则执行性能可能会有所不同。然而,从数据角度来看,最终结果应该是完全相同的。虽然我不知道任何此类性能技巧,所以可能没有,但很可能有。

如果执行计划因表排序而不同,则结果顺序也可能存在差异。 IE。数据库引擎将选择一个表作为主表,并对另一个表进行哈希联接或类似操作,这可能会以不同的顺序返回行。 但是,除非您专门对行进行排序,否则包含相同行的两个结果集是等效的,即使它们的行顺序不同。我发现这比出现性能差异的可能性更小,因为其中一个表总是可能比另一个表贡献更多的行到结果中,因此无论哪种方式,选择哪个作为主表都应该是相同的。

关于sql-server - 为什么我们不能通过交换表来使用左外连接,而是使用右外连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26886973/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com