示例语句
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> -- MySQL附加
10 LIMIT <limit_number>
:::info 前9步都是SQL92标准语法。limit是MySQL的独有语法 :::
图解
流程分析
FROM(将最近的两张表,进行笛卡尔积)---VT1
ON(将VT1按照它的条件进行过滤)---VT2
LEFT JOIN(保留左表的记录)---VT3
WHERE(过滤VT3中的记录)--VT4…VTn
GROUP BY(对VT4的记录进行分组)---VT5
HAVING(对VT5中的记录进行过滤)---VT6
SELECT(对VT6中的记录,选取指定的列)--VT7
ORDER BY(对VT7的记录进行排序)--VT8
LIMIT(对排序之后的值进行分页)--MySQL特有的语法