SQL语句执行顺序
一个完整的SQL语句框架如下:
SELECT DISTINCT
<select_list>
FROM
<left_table>
<join_type> JOIN
<right_table>
ON
<join_condition>
WHERE
<where_condition>
GROUP BY
<group_by_list>
HAVING
<having_condition>
ORDER BY
<order_by_condition>
LIMIT <limit_number>
具体的执行顺序并不是按照书写顺序,而是会经过服务层优化器组件的优化,最终的执行顺序如下:
1、FROM <left_table>
2、ON <join_condition>
3、<join_type> JOIN <right_table>
4、WHERE <where_condition>
5、GROUP BY <group_by_list>
6、HAVING <having_condition>
7、SELECT
8、DISTINCT <select_list>
9、ORDER BY <order_by_condition>
10、LIMIT <limit_number>
从最先执行的是FROM操作,到最后执行的是LIMIT操作。每个操作都会产生一个虚拟表,该虚拟表作为下一个处理的输入。
SQL JOINS
- INNER JOIN
如果表中有至少一个匹配,则返回行,两表的交集 - LEFT JOIN
即使右表中没有匹配,也从左表返回所有的行,左表是主表 - RIGHT JOIN
即使左表中没有匹配,也从右表返回所有的行,右表是主表 - FULL JOIN
只要其中一个表中存在匹配,则返回行,两表的并集