如何在(选择)语句中最好地组织内部联接

时间:2010-10-10 09:15:01

标签: sql

假设我有三个表,每个表与另一个表相关,

当我需要从每个表中获取一列时,它是如何组织的 (内连接)??

Select table1.column1,table2.column2,table3.column2
From table1 
Inner Join table2 on ..... etc
Inner Join table3 on .....

换句话说,我可以把(table2)放在(From)??

之后
Select table1.column1,table2.column2,table3.column2
From table2
Inner Join table1 on ..... etc
Inner Join table3 on .....

2 个答案:

答案 0 :(得分:15)

对于大多数查询,订单无关紧要。

  • INNER JOIN既是关联的又是可交换的,所以表顺序无关紧要
  • SQL是声明性的。也就是说,您如何定义查询并不是优化器如何解决问题。它并没有像你写的那样逐行完成。

那说......

  • OUTER JOIN既不是关联的也不是可交换的
  • 对于复杂查询,优化器将“最佳猜测”,而不是经历"costs"过多的所有可能性。表顺序可能在这里很重要

答案 1 :(得分:6)

inner join操作左右相关性。只要在加入之前没有引用ON条件中的任何表,那么编写表的顺序并不重要。

执行语句时,数据库引擎将确定执行连接的最佳顺序,这可能与它们在SQL查询中出现的顺序不同。