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
答案 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.DEPTID
和DEPT.DEPTID=EMP.EMPDEPID
都是布尔术语,并评估相同的内容。因此,它们之间没有区别。