我们可以通过以任何顺序执行连接来实现连接表的预期结果吗?假设我们想要连接两个表A和B(顺序AB).我们可以通过B和A(BA)的正确连接获得相同的结果.
3桌ABC怎么样?我们只能通过更改订单和连接类型来获得任何结果吗?例如A左连接B内连接C.我们可以用BAC命令获得它吗?如果我们有4个或更多表怎么样?
更新.
问题Does the join order matter in SQL?是关于内连接类型.同意然后加入的顺序无关紧要.该问题中提供的答案并未回答我的问题是,是否可以通过选择我们喜欢的任何表格顺序来获得与任何原始连接类型(join types here)连接表的所需结果,并且仅通过使用连接类型进行操作来实现此目标.
最佳答案 在内连接中,连接中表的排序无关紧要 – 无论连接语句中的顺序如何,相同的行都将构成结果集.
在左外连接或右外连接中,顺序很重要.在左连接B中,对于表A中的每个记录,结果集将包含一行,而不管表B中是否存在匹配的行.如果存在不匹配的行,则可能是与B不同的结果集左连接A.
在完全外部联接中,订单再次无关紧要 – 无论订单如何,都会为每个联接表中的每一行生成行.
关于左连接B对B右连接A – 这些将产生相同的结果.在具有2个表的简单情况下,交换表并更改外部联接的方向将导致相同的结果集.
如果所有外连接都在同一方向,这也适用于3个或更多表 – 左连接B左连接C将给出与C右连接B右连接A相同的结果集.
如果你开始混合左右连接,那么你需要开始更加小心.几乎总会有一种方法可以使用重新排序的表进行等效查询,但是此时子查询或包围表达式可能是澄清您正在做什么的最佳方式.
正如另一位评论者所说,使用任何使你的目的最清楚的东西通常是最好的选择.查询中的表的排序应该在性能上有很小的差别,因为查询优化器应该解决这个问题(尽管确保这一点的唯一方法是使用您自己的查询检查每个选项的执行计划,数据).