SQL查询语句的执行顺序

查询的逻辑执行顺序

  1. FROM < left_table>

  2. ON < join_condition>

  3. < join_type> JOIN < right_table>

  4. WHERE < where_condition>

  5. GROUP BY < group_by_list>

  6. WITH {cube | rollup}

  7. HAVING < having_condition>

  8. SELECT

  9. DISTINCT

  10. ORDER BY < order_by_list>

  11. < top_specification> < select_list>
    标准的SQL 的解析顺序为:

  12. FROM 子句 组装来自不同数据源的数据

  13. WHERE 子句 基于指定的条件对记录进行筛选

  14. GROUP BY 子句 将数据划分为多个分组

  15. 使用聚合函数进行计算

  16. 使用HAVING子句筛选分组

  17. 计算所有的表达式

  18. 使用ORDER BY对结果集进行排序
    执行顺序

  19. FROM:对FROM子句中前两个表执行笛卡尔积生成虚拟表vt1

  20. ON:对vt1表应用ON筛选器只有满足< join_condition>
    为真的行才被插入vt2

  21. OUTER(join):如果指定了 OUTER JOIN保留表(preserved
    table)中未找到的行将行作为外部行添加到vt2
    生成t3如果from包含两个以上表则对上一个联结生成的结果表和下一个表重复执行步骤和步骤直接结束

  22. WHERE:对vt3应用 WHERE
    筛选器只有使< where_condition> 为true的行才被插入vt4

  23. GROUP BY:按GROUP BY子句中的列列表对vt4中的行分组生成vt5

  24. CUBE|ROLLUP:把超组(supergroups)插入vt6 生成vt6

  25. HAVING:对vt6应用HAVING筛选器只有使< having_condition> 为true的组才插入vt7

  26. SELECT:处理select列表产生vt8

  27. DISTINCT:将重复的行从vt8中去除产生vt9

  28. ORDER BY:将vt9的行按order by子句中的列列表排序生成一个游标vc10

  29. TOP:从vc10的开始处选择指定数量或比例的行生成vt11
    并返回调用者

更多详细可以参考:

理解SQL原理,写出高效的sql语句

jcsu的微博——数据库理论

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值