在Oracle中,首先评估哪些子句类型?如果我有以下内容(假装....表示有效的表达式和关系名称),则求值顺序是什么?
SELECT ... FROM ..... WHERE ........ GROUP BY ........... HAVING ............. ORDER BY ................
我的印象是SELECT子句最后被求值,但除此之外,我一无所知。
选择列表不能总是被最后评估,因为ORDER BY可以使用选择列表中定义的别名,因此必须在以后执行。例如:
SELECT foo+bar foobar FROM table1 ORDER BY foobar
我要说的是,通常执行的顺序可能是这样的:
可以交换GROUP BY和WHERE子句而不更改结果,HAVING和ORDER BY也可以。
实际上,事情更加复杂,因为数据库可以根据不同的执行计划对执行进行重新排序。只要结果保持不变,按执行顺序无关紧要。
还要注意,如果为ORDER BY子句选择了索引,则从磁盘读取行时,它们的顺序可能已经正确。在这种情况下,根本不会真正执行ORDER BY子句。