打好基础——数据库——SQL语句的执行顺序
SQL语句的执行顺序对于编写和理解复杂的查询是非常重要的。这是一个典型的SQL查询(例如SELECT)的基本执行顺序:
FROM和JOIN: 这些子句是首先执行的。在这个阶段,数据库会组合所有的输入表格,形成一个结果集。JOIN条件定义了如何组合这些表格。WHERE: 然后数据库将根据WHERE子句的条件过滤结果集。这个阶段移除所有不满足条件的行。GROUP BY: 然后如果有的话,将对剩下的行进行分组。这创建了一个可以用于聚合函数(如SUM,AVG,MAX等)的新的结果集。HAVING: 如果存在HAVING子句,那么它将在GROUP BY子句之后执行,用来过滤由GROUP BY子句创建的分组结果。同样,这个阶段会移除所有不满足条件的行。SELECT: 在此阶段,SQL将执行所有在SELECT子句中的表达式。DISTINCT: 如果有的话,DISTINCT关键字会移除任何重复的行。UNION:表联合。ORDER BY: 最后,如果存在ORDER BY子句,数据库将对结果集进行排序。LIMIT/OFFSET: 这些子句最后执行,确定返回给客户端的最终行数。
这是标准的逻辑执行顺序,实际物理执行顺序可能会根据数据库优化器的选择而变化,但是结果会与这个逻辑顺序产生的结果一致。这种逻辑顺序也解释了为什么你不能在WHERE子句中使用SELECT子句中定义的别名,因为SELECT子句在WHERE子句之后执行。
SQL语句可以看做以下的过程:
列出并连接需要用到的表。
过滤结果集,这过程会移除不满住条件的行。
创建分组
过滤分组,过滤分组中不满足条件的行。
执行表达式。
去重
排序
返回指定的行数。