sql join语句的顺序

时间:2017-11-11 11:50:43

标签: mysql sql relational-database

我有些东西对我来说不清楚:

select Student.sID, sName, GPA, Apply.cName, enrollment
from Student, College, Apply
where Apply.sID = Student.sID and Apply.cName = College.cName;

所以在这个语句中交叉产品出现在连接条件之前,或者它们是在同一时间完成的,我的意思是我们比较sid,然后我们形成表格,或者我们将表格“交叉产品”然后我们制作条件?

2 个答案:

答案 0 :(得分:0)

“然后我们形成表格”是正确的。你的语法没有错。

答案 1 :(得分:0)

查询优化器将始终尝试制定优化的计划。所以,最有可能的是,它不应该首先确定交叉产品,然后应用WHERE子句;但是,如果交叉连接的记录很少,查询优化器可能会选择首先获取交叉产品,这样做最终会降低成本。

因此,确定mysql如何处理此查询的唯一方法是查看查询计划,您可以使用EXPLAIN命令获取该计划,如下所示。

获取查询优化工具的查询计划

EXPLAIN select Student.sID, sName, GPA, Apply.cName, enrollment
from Student, College, Apply
where Apply.sID = Student.sID and Apply.cName = College.cName;

另外,您可能会发现以下内容非常有用,它来自EXPLAIN statement in MySql的MySql文档

  

当您在SELECT语句之前使用关键字EXPLAIN时,MySQL会显示优化程序中有关语句执行计划的信息。也就是说,MySQL解释了它将如何处理语句,包括有关如何连接表以及以何种顺序连接的信息。有关使用EXPLAIN获取执行计划信息的信息,请参见第8.8.2节“EXPLAIN输出格式”。