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

Nou*_*uny 8 sql

假设我有三张桌子,每张桌子都与另一张桌子相关,

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

Select table1.column1,table2.column2,table3.column2
From table1 
Inner Join table2 on ..... etc
Inner Join table3 on .....
Run Code Online (Sandbox Code Playgroud)

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

Select table1.column1,table2.column2,table3.column2
From table2
Inner Join table1 on ..... etc
Inner Join table3 on .....
Run Code Online (Sandbox Code Playgroud)

gbn*_*gbn 15

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

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

那说......

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


Mar*_*ers 6

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

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