选择FROM和加入哪个表是否重要?

时间:2014-07-22 23:48:46

标签: mysql sql join

如果我从两个表中选择相等的字段,那么来自SELECT的哪个表以及来自JOIN的哪个表是否重要?

我想我真的对如何最好地加入桌子感兴趣。是否有SELECT FROM以及JOIN或哪些不重要的准则?

我正在处理一个连接大约5个表的查询,并且不确定我从哪个表中拉出来以及我加入哪个表。目前我正在使用FROM表格WHERE子句来自。LEFT JOIN我认为这是正确的方法,但任何解释或指导都会很棒!

同样适用于INNER JOIN,因为我看到的反馈是默认SELECT a.field1, a.field2, a.field3, b.field1, b.field2 并不重要。

例如

FROM 
  a
JOIN
  b ON a.field1 = b.field1
WHERE
  a.field1 = 'abc'

选择1:

FROM 
  b
JOIN
  a ON b.field1 = a.field1
WHERE
  a.field1 = 'abc'

选择2:

{{1}}

1 个答案:

答案 0 :(得分:3)

内部连接没有功能差异,但外部连接存在功能差异。 (Does the join order matter in SQL?

^^描绘原因的好方法是:A和B之间的左外连接与B和A之间的右外连接是相同的。方向对外连接非常重要。实际上,这就是为什么你不必在'left join'或'right join'中说出关键字'outer'的原因,数据库知道你想要一个外连接,否则就没有必要指定方向。

如果您的问题与性能有关,是的,首先指定较小​​的表并随后加入较大的表(而不是相反的方式)可能会有优势。但是,根据表格的相关性,并不总是可以优化这种方式。

Oracle实例具有LEADING提示,可以用来指示数据库首先从指定的表开始,即使它不是FROM子句中列出的第一个(http://docs.oracle.com/cd/B13789_01/server.101/b10752/hintsref.htm#30459)。