条件顺序重要吗?

时间:2014-06-20 16:21:50

标签: sql

SELECT EMP.EMPNAME,EMP.EMPID,
EMP.EMPDEPID,DEPT.DEPTID
FROM EMPLOYEE EMP,DEPARTMENT DEPT
WHERE EMP.EMPDEPID=DEPT.DEPTID;

这里在where子句中,条件的顺序是否重要?也就是说,这会给我带来不同的结果吗?:

EMP.EMPDEPID = DEPT.DEPTID

DEPT.DEPTID = EMP.EMPDEPID

2 个答案:

答案 0 :(得分:1)

这个顺序并不重要。数据库引擎优化器将解析您的查询并创建执行计划。所以,无论如何,你都会以这种方式放置它,优化器无论如何都会以它的方式来统治它。

事实上你可以测试它。获取执行计划并进行比较。这里解释说:How do I obtain a Query Execution Plan?

此外,较新的Sql标准建议使用Inner join ... On ...语法而不是FROM

中的表列表

答案 1 :(得分:1)

以前,我认为联接顺序是在SQL 92 standard中指定的。

这意味着您可以使用INNER JOIN语法编写查询,如下所示:

SELECT EMP.EMPNAME,EMP.EMPID,
EMP.EMPDEPID,DEPT.DEPTID
FROM EMPLOYEE EMP 
inner join DEPARTMENT DEPT on EMP.EMPDEPID=DEPT.DEPTID;

这个不正确的信息是由LINQ强制执行的,在连接中,第一个连接元素对应于第一个或先前声明的表。

然而,规范只表明联接必须与<search condition>匹配。

<join specification> ::=
    <join condition>
  | <named columns join>

<join condition> ::= ON <search condition>

此搜索条件与WHERE子句中使用的条件完全相同,与SQL 89样式连接完全相同。

<search condition>定义为:

 <search condition> ::=
        <boolean term>
      | <search condition> OR <boolean term>

因此,只要在搜索条件中创建布尔项,查询就有效。 EMP.EMPDEPID=DEPT.DEPTIDDEPT.DEPTID=EMP.EMPDEPID都是布尔术语,并评估相同的内容。因此,它们之间没有区别。