SQL执行顺序

对于查询语句
     (1) FROM left_table
  (3) join_type JOIN right_table (2) ON join_condition
  (4) WHERE where_condition
  (5) GROUP BY group_by_list
  (6) WITH {cube | rollup}
  (7) HAVING having_condition
  (8) SELECT (9) DISTINCT (11) top_specification select_list
  (10) ORDER BY order_by_list

标准的 SQL 的解析顺序为:
  (1) FROM 子句 组装来自不同数据源的数据
  (2) WHERE 子句 基于指定的条件对记录进行筛选
  (3) GROUP BY 子句 将数据划分为多个分组
  (4) 使用聚合函数进行计算
  (5) 使用HAVING子句筛选分组
  (6) 计算所有的表达式
  (7) 使用ORDER BY对结果集进行排序

具体执行顺序为:

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

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

3. JOIN 类型,以及它们之间的差异:

(INNER) JOIN: vt2 -> vt3

LEFT JOIN: 列出所有左表未找到的行,作为外部行添加到vt2,生成t3

RIGHT JOIN: 列出所有右表未找到的行,作为外部行添加到vt2,生成t3

FULL JOIN:列出所有左、右表未找到的行,作为外部行添加到vt2,生成t3

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

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

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

------使用聚合函数进行计算------

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

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

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

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

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

SQL执行顺序,布布扣,bubuko.com

SQL执行顺序

上一篇:Spring JdbcTemplate框架搭建及其增删改查使用指南


下一篇:连接MySql超时断开报错问题