“携手创作,共同成长!这是我参与「掘金日新计划 · 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语句 - 执行顺序:
- FROM
选取表,将多个表数据通过笛卡尔积变成一个表。生成虚拟表1 - ON
对笛卡尔积的虚表进行筛选 - JOIN
指定join,用于添加数据到on之后的虚表中,例如left join会将左表的剩余数据添加到虚表中,生成虚拟表2 - WHERE
对上述虚表进行过滤,将满足条件的数据过滤出来,生成虚拟表3 - GROUP BY
对满足where条件的虚拟表3进行分组操作,分组完成生成虚拟表4 - HAVING
一般都是使用虚拟函数,对分组后的结果进行聚合筛选,生成虚拟表5 - SELECT
执行select * 或select id等,返回的单列必须在group by子句中,聚合函数除外,对虚拟表5的进行操作,把需要的字段提取出来,生成虚拟表6 - DISTINCT
数据除重 - ORDER BY
对虚拟表6的字段进行排序,生成虚拟表7 - LIMIT OFFSET
在虚拟表7上进行操作,从指定位置取出指定数量的数据,生成最终表