摘自《MySQL技术内幕:SQL编程》
SQL语句执行顺序
- FROM <left_table>: 对FROM子句中的表执行笛卡尔积,产生虚拟表VT1。
- <join_type> JOIN <right_table> ON <join_condition>: 对VT1应用连接条件,产生虚拟表VT2。
- WHERE <where_condition>: 对VT2应用WHERE条件,产生虚拟表VT3。
- GROUP BY <group_by_list>: 对VT3进行分组,产生虚拟表VT4。
- WITH {CUBE|ROLLUP}: 对VT4进行多维数据汇总,产生虚拟表VT5。
- HAVING <having_condition>: 对VT5应用HAVING条件,产生虚拟表VT6。
- SELECT (DISTINCT <select_list>): 从VT6中选择列,并可能去除重复行,产生虚拟表VT7。
- ORDER BY <order_by_condition>: 对VT7进行排序,产生虚拟表VT8。
- LIMIT <limit_number>: 从VT8中取出指定数量的行,并返回给用户。
SQL语句定义顺序
- SELECT (DISTINCT <select_list>): 定义要查询的列,包括是否使用DISTINCT去除重复行。
- FROM <left_table>: 定义查询的主表,即数据的主要来源。
- <join_type> JOIN <right_table> ON <join_condition>: 定义与主表的连接操作,包括连接类型和连接条件。
- WHERE <where_condition>: 定义筛选条件,只返回符合条件的行。
- GROUP BY <group_by_list>: 对结果集进行分组。
- WITH {CUBE|ROLLUP}: 对分组结果进行多维数据汇总,产生超立方体或上卷数据。
- HAVING <having_condition>: 对分组后的结果进行过滤。
- ORDER BY <order_by_condition>: 对结果集进行排序。
- LIMIT <limit_number>: 限制返回的行数。
wx公众号:Java技术咖啡馆
你的关注,是我们的动力:每一次的点赞、分享和评论,都是对我最大的支持和鼓励。你的关注,将是我不断前行的动力。感谢你的支持,期待你的关注。