SQL语句执行顺序

179 阅读2分钟

“携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第18天,点击查看活动详情

SQL语句执行顺序

SQL语句是我们在开发过程中,经常会用到的,帮助我们更好的去操作数据库。之前在面试的时候,也有面试官问过这个问题,所以我们应该搞清楚SQL执行的顺序,后面才能更好的去优化SQL,起到事半功倍的效果。

SELECT语句 - 语法顺序:

1. SELECT 
2. DISTINCT <select_list>
3. FROM <left_table>
4. <join_type> JOIN <right_table>
5. ON <join_condition>
6. WHERE <where_condition>
7. GROUP BY <group_by_list>
8. HAVING <having_condition>
9. ORDER BY <order_by_condition>
10.LIMIT <limit_number>

每执行一步都会生成一个虚拟表,该虚拟表被用作下一个步骤的输入。这些虚拟表对调用者(客户端应用程序或者外部查询)不可用。只是最后一步生成的表才会返回给调用者。如果没有在查询中指定某一子句,将跳过相应的步骤。

SELECT语句 - 执行顺序:

  1. FROM
    选取表,将多个表数据通过笛卡尔积变成一个表。生成虚拟表1
  2. ON
    对笛卡尔积的虚表进行筛选
  3. JOIN
    指定join,用于添加数据到on之后的虚表中,例如left join会将左表的剩余数据添加到虚表中,生成虚拟表2
  4. WHERE
    对上述虚表进行过滤,将满足条件的数据过滤出来,生成虚拟表3
  5. GROUP BY
    对满足where条件的虚拟表3进行分组操作,分组完成生成虚拟表4
  6. HAVING
    一般都是使用虚拟函数,对分组后的结果进行聚合筛选,生成虚拟表5
  7. SELECT
    执行select * 或select id等,返回的单列必须在group by子句中,聚合函数除外,对虚拟表5的进行操作,把需要的字段提取出来,生成虚拟表6
  8. DISTINCT
    数据除重
  9. ORDER BY
    对虚拟表6的字段进行排序,生成虚拟表7
  10. LIMIT OFFSET
    在虚拟表7上进行操作,从指定位置取出指定数量的数据,生成最终表