Sql执行顺序
SQL 查询语句执行步骤详解
执行步骤及示例
执行步骤 | SQL 示例部分 | 描述 |
---|---|---|
1. FROM 子句 | FROM table1 JOIN table2 ON table1.id = table2.id | 首先确定要查询的数据来源,包括要查询的表以及它们之间的连接关系。在这个例子中,table1 和table2 通过id 字段进行连接,这一步会生成一个临时的笛卡尔积结果集(如果没有ON 条件限制的话),但因为有连接条件,会根据条件筛选出符合连接要求的行组合。 |
2. WHERE 子句 | WHERE table1.status = 'active' AND table2.amount > 100 | 在第一步生成的临时结果集基础上,根据WHERE 条件筛选行。这里只保留table1 中status 为active 且table2 中amount 大于 100 的行组合。 |
3. GROUP BY 子句(如果有) | GROUP BY table1.category | 如果查询中有GROUP BY 子句,此时会按照指定的列(这里是table1.category )对数据进行分组。这一步会将之前筛选后的结果集按照分组列的值进行分组,将相同组别的行组合在一起。 |
4. HAVING 子句(如果有) | HAVING COUNT(table2.id) > 1 | 如果有HAVING 子句,会在GROUP BY 分组后的结果集上进行筛选。这里只保留分组后table2.id 的计数大于 1 的组。 |
5. SELECT 子句 | SELECT table1.category, SUM(table2.amount) | 从经过前面步骤筛选和分组后的结果集中选择需要的列或表达式。在这个例子中,选择table1.category 列和table2.amount 列的总和。如果查询中有表达式,如聚合函数(SUM 、COUNT 等),会在这一步进行计算。 |
6. ORDER BY 子句(如果有) | ORDER BY SUM(table2.amount) DESC | 如果有ORDER BY 子句,会根据指定的列或表达式(这里是SUM(table2.amount) )对最终结果集进行排序。DESC 表示降序排列,也可以使用ASC 表示升序排列。 |
复杂情况说明
如果查询涉及子查询、窗口函数等复杂情况,执行顺序会更加复杂,不过基本原则仍然适用。子查询通常会先执行,窗口函数会在分组等操作后执行(具体取决于其定义位置和用途)。