sql – 当使用LEFT(外部)连接时,连接中表的顺序是否重要?

前端之家收集整理的这篇文章主要介绍了sql – 当使用LEFT(外部)连接时,连接中表的顺序是否重要?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想确认一下SQL查询
SELECT ....
  FROM apples,oranges
       LEFT JOIN kiwis ON kiwis.orange_id = oranges.id,bananas
 WHERE ....

完全等同于FROM子句中的其他排列,例如

SELECT ....
  FROM oranges
       LEFT JOIN kiwis ON kiwis.orange_id = oranges.id,bananas,apples
 WHERE ....

要么

SELECT ....
  FROM bananas,apples,oranges
       LEFT JOIN kiwis ON kiwis.orange_id = oranges.id
 WHERE ....

只要桔子和猕猴桃之间明确的LEFT JOIN保持不变.从我在各种文档中看到的内容来看,返回的集应该完全相同.

我真的只关心查询的结果,而不是它在实际数据库中的性能. (我正在使用Postgresql 8.3,其中AFAIK不支持关于连接顺序的优化器提示,并将尝试自动创建最佳查询计划).

解决方法

它是一样的,但它与隐含的CROSS JOIN一样模棱两可.使用显式JOINS.

如果要加入WHERE子句,则结果可能会有所不同,因为连接和过滤器混合在一起.

SELECT ....
  FROM apples a
       JOIN
       bananas b ON ...
       JOIN 
       oranges o ON ...
       LEFT JOIN
       kiwis k ON k.orange_id = o.id
 WHERE (filters only)

笔记:

> INNER JOINS和CROSS JOINS是可交换和关联的:顺序通常无关紧要.>外部联接不是,您确定了> sql是声明性的:您告诉优化器您想要什么,而不是如何操作.这将删除JOIN订单注意事项(取决于前两个项目)

猜你在找的MsSQL相关文章