示例语句

  1. SELECT DISTINCT < select_list >
  2. FROM < left_table > < join_type >
  3. JOIN < right_table > ON < join_condition > WHERE < where_condition >
  4. GROUP BY < group_by_list >
  5. HAVING < having_condition >
  6. ORDER BY < order_by_condition >
  7. LIMIT < limit_number >

执行顺序

  1. -- 行过滤
  2. 1 FROM <left_table>
  3. 2 ON <join_condition>
  4. 3 <join_type> JOIN <right_table> 第二步和第三步会循环执行
  5. 4 WHERE <where_condition> 第四步会循环执行,多个条件的执行顺序是从左往右的。
  6. 5 GROUP BY <group_by_list>
  7. 6 HAVING <having_condition> --列过滤
  8. 7 SELECT
  9. 8 DISTINCT <select_list> --排序
  10. 9 ORDER BY <order_by_condition> -- MySQL附加
  11. 10 LIMIT <limit_number>

:::info 前9步都是SQL92标准语法。limit是MySQL的独有语法 :::

图解

image.png

流程分析

  1. FROM(将最近的两张表,进行笛卡尔积)---VT1
  2. ON(将VT1按照它的条件进行过滤)---VT2
  3. LEFT JOIN(保留左表的记录)---VT3
  4. WHERE(过滤VT3中的记录)--VT4VTn
  5. GROUP BY(对VT4的记录进行分组)---VT5
  6. HAVING(对VT5中的记录进行过滤)---VT6
  7. SELECT(对VT6中的记录,选取指定的列)--VT7
  8. ORDER BY(对VT7的记录进行排序)--VT8
  9. LIMIT(对排序之后的值进行分页)--MySQL特有的语法