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.

 

posted on 2017-03-06 15:48  blbl9527  阅读(115)  评论(0)    收藏  举报

导航


github sina微博 FB