在执行具有多个连接的查询时,SQL是否遵循任何优先级。
示例查询
SELECT emp.ename, emp.DEPTNO, emp.JOB, emp.SAL
FROM EMPLOYEE emp
INNER JOIN DEPARTMENT Dept On emp.DEPTNO = Dept.DEPTNO
INNER JOIN (
SELECT MAX(emp.sal) maxSal, emp.DEPTNO
FROM EMPLOYEE emp
GROUP BY emp.DEPTNO
) AS maxSalData
ON emp.DEPTNO = maxSalData.DEPTNO AND emp.SAL = maxSalData.maxSal
我的问题是要知道,当存在多个连接时,如何执行SQL查询。
答案 0 :(得分:4)
优化器确定连接的顺序。
我想要注意,有一种更简单的方法来编写查询:
SELECT emp.ename, emp.DEPTNO, emp.JOB, emp.SAL
FROM (SELECT emp.*, MAX(emp.sal) OVER (PARTITION BY emp.DEPTNO) as maxsal
FROM EMPLOYEE emp
) emp;
所以:
JOIN
到DEPARTMENT
。因此,关于连接处理顺序的问题是错误的,因为更好的查询版本甚至没有明确的JOIN
。但是,答案是优化器确定JOIN
的执行顺序。 SQL作为一种语言的意图是它是声明性,而不是过程。也就是说,它描述了要生成的结果,但没有说明如何完成。