SQL逻辑查询语句执行顺序
2016-08-26 本文已影响0人
简书_捡书
tab_1
![](https://img.haomeiwen.com/i2802788/4574f749217ecd64.png)
tab_2
![](https://img.haomeiwen.com/i2802788/b1413ac86b72e71a.png)
代码执行顺序
(7) SELECT
(8) DISTINCT <select_list>
(1) FROM <left_table>
(3) <join_type> JOIN <right_table>
(2) ON <join_condition>
(4) WHERE <where_condition>
(5) GROUP BY <group_by_list>
(6) HAVING <having_condition>
(9) ORDER BY <order_by_condition>
(10) LIMIT <limit_number>
执行FROM 形成笛卡尔积
![](https://img.haomeiwen.com/i2802788/cda75faf736e1804.png)
执行ON过滤
![](https://img.haomeiwen.com/i2802788/cce69207f976af65.png)
添加外部行
LEFT OUTER JOIN
把左表记为保留表,得到的结果为(也就是我们查询得到的结果 VT_3):
![](https://img.haomeiwen.com/i2802788/e21c950ba127e3c7.png)
把右表记为保留表,得到的结果为:
![](https://img.haomeiwen.com/i2802788/ce28d6874631b5ce.png)
FULL OUTER JOIN
把左右表都作为保留表,得到的结果为:
![](https://img.haomeiwen.com/i2802788/d81f055e3dec9e7c.png)
执行WHERE过滤
![](https://img.haomeiwen.com/i2802788/a0eeb9a11be97d59.png)
执行GROUP BY分组
![](https://img.haomeiwen.com/i2802788/0bd83624b5373477.png)
执行HAVING过滤
![](https://img.haomeiwen.com/i2802788/2ad658aa88941e41.png)
SELECT查找
![](https://img.haomeiwen.com/i2802788/3e70460a8d6bebb2.png)
执行DISTINCT子句
创建一张内存临时表,当内存不够的时候,就需要存入硬盘
这张表会比原先的虚表多一个唯一的索引,以此来去除重复的数据
执行ORDER BY子句
![](https://img.haomeiwen.com/i2802788/b6044d9da2e01925.png)
执行LIMIT子句
![](https://img.haomeiwen.com/i2802788/71a6f8f499b764cf.png)