sql语句的执行顺序
---恢复内容开始---
下面是一条典型的sql语句:
select distinct <col1,col2,...>
from <left_tab>
<join_type> join <right_tab>
on<join_condition>
where<condition>
group by<col1,col2,...>
having <condition>
order by<conditon>
limit< a_number>
------------------------------------------------------------
那么执行顺序就是下面这样:
from<left_tab> -> on<join_condition> -> <join_type>join<right_table>
-> where<condition> -> group by<col1,col2,...> -> having<condition>
-> select -> distinct -> order by<condition> -> limit<a_number>
------------------------------------------------------------
①查询总是有一个起点from,
两个表进行关联(笛卡尔运算:前个表的每一条记录和后面每一天记录进行组合产生一条新记录,然后把产生的每一条新记录放到一个新的临时的表中vt1)
②显然上一步的关联产生了很多没有意思的数据那么进行过滤ON给出了过滤的条件,过滤之后的结果放在一个临时的表vt2
③㈠如果是外连接 【left outer join,right outer join,full outer join】
把【left|right|full】表为基础表格,添加一些别的数据(实际上添加的是 NULL)
把数据保存到临时表格vt3
③㈡如果是内连接:啥都不干
④对vt3表格进行where过滤产生临时表格vt4
⑤对vt4进行group by分组操作,把结果保存在临时表格vt5
⑥对执行分组操作的临时数据表进行having过滤生产临时表格vt6
⑦对vt6表进select,选取我们需要的列,把结果保存在临时表格vt7
⑧对产生临时表vt7,此表格同vt6,但是数据是不重复的
⑨limit限制记录的条数
----------------------------------------------------------------------
that's all.
浙公网安备 33010602011771号