MySQL - 左连接是否正式优先于右连接?

时间:2012-07-11 18:18:53

标签: mysql

MySQL documentation for joins中,一位同事今天向我指出了这个宝石:

  

RIGHT JOINLEFT JOIN类似。为了使代码可以跨数据库移植,建议您使用LEFT JOIN而不是RIGHT JOIN

有人能够对此有所了解吗?这让我觉得可能是过去时代的遗留物 - 就像文档中的意思是“保持代码与早期版本的MySQL反向兼容......”

是否存在不支持RIGHT JOIN的现代RDBMS?我认为RIGHT JOINLEFT JOIN的语法糖,任何RIGHT JOIN都可以表示为LEFT JOIN,但有时候如果你在那里写一个查询,可读性会受到影响方向。

这个建议仍然现代有效吗?是否有令人信服的理由避免RIGHT JOIN

3 个答案:

答案 0 :(得分:27)

至少有一个SQL引擎不支持RIGHT JOINSQLite。也许这就是兼容性被列为关注的原因。可能还有其他SQL引擎。

答案 1 :(得分:1)

因此,RIGHT和LEFT JOIN在典型的SQL引擎中执行相同的操作。 LEFT JOIN表a到表b会返回a中存在的b内的所有内容。 RIGHT JOIN表a到表b会返回b中存在的a内的所有内容。在优化查询之前,LEFT和RIGHT关键字仅指在哪个表上执行的操作。 MySQL优化器将始终规范化查询并使JOIN有效地成为LEFT JOIN。因此,编写查询以使用LEFT JOIN而不是RIGHT将在优化器中降低成本。

答案 2 :(得分:-1)

这是一个明智的惯例所以它应该是首选,除非你想向以后可能阅读它的人表达不同或不同寻常的东西(重要的是,包括你自己)。

您的问题是有效的,但要完成答案,则需要:

1)一个反例,其中RIGHT JOIN不运行,或者运行时存在显着差异

-OR -

2)证明没有这种情况:1存在

我认为这些很难实现。您的建议可能已被弃用,因为您的建议可能已被弃用。这也可能是由于MySQL支持多个数据库后端的一些问题。也许其中一个是正确加入不容忍的?