jon*_*son 4 sql oracle clause operator-precedence
在 Oracle 中,首先评估哪些子句类型?如果我有以下内容(假装 .... 代表有效的表达式和关系名称),评估的顺序是什么?
SELECT   ...
FROM     .....
WHERE    ........
GROUP BY ...........
HAVING   .............
ORDER BY ................
Run Code Online (Sandbox Code Playgroud)
我的印象是 SELECT 子句是最后评估的,但除此之外我一无所知。
选择列表不能总是最后评估,因为 ORDER BY 可以使用选择列表中定义的别名,因此它们必须在之后执行。例如:
SELECT foo+bar foobar FROM table1 ORDER BY foobar
Run Code Online (Sandbox Code Playgroud)
我想说,一般来说,执行顺序可能是这样的:
GROUP BY 和 WHERE 子句可以在不改变结果的情况下交换,就像 HAVING 和 ORDER BY 一样。
实际上事情更复杂,因为数据库可以根据不同的执行计划重新排序执行。只要结果保持不变,它的执行顺序无关紧要。
另请注意,如果为 ORDER BY 子句选择了索引,则当从磁盘读取行时,这些行可能已经处于正确的顺序。在这种情况下,ORDER BY 子句根本没有真正执行。
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           14478 次  |  
        
|   最近记录:  |