时间:2021-07-01 10:21:17 帮助过:3人阅读
8SELECT 9DISTINCT <select_list> 1FROM <left_table> 3JOIN <right_table> 2ON <join_condition> 4WHERE <where_condition> 5GROUP BY <group_by_list> 6WITH {CUBE|ROLLUP} 7HAVING <having_condition> 10ORDER BY <order_by_list> 11LIMIT <limit_number>
可以看到最先执行的是FROM 最后会执行LIMIT 。每一个步骤都会产生一个虚拟表,该虚拟表对用户是透明的,之后最后异步生成的虚拟表才会返回给用户。
1:FROM :如果是一个表的话就是从该表选取数据,如果是两个表的话,会执行笛卡尔积,产生虚拟表VT1。
2:ON:对虚拟表VT1 应用ON筛选,符合条件的行插入到虚拟表VT2 中。
3:JOIN:如果指定了OUTER JOIN (LEFT OUTER JOIN、RIGHT OUTER JOIN)保留表中未匹配的行作为外部行添加到虚拟表VT2中,产生虚拟表VT3。
4:WHERE :对虚拟表VT3进行条件过滤,符合条件的插入的虚拟表VT4中。
5:GROUP BY :对虚拟表VT4进行分组操作。产生虚拟表VT5。
6:CUBE|ROLLUP对虚拟表VT5进行CUBE或者ROLLUP操作,产生虚拟表VT6.
7:HAVING:对VT6表进行过滤。符合条件的插入VT7中。
8:SELECT:第二次执行select操作选择指定的列,插入到虚拟表VT8中。
9:DISTINCT:去重。然后插入虚拟表VT9中。
10:ORDER BY :排序,产生虚拟表VT10.
11:LIMIT:取出指定的行。产生虚拟表VT11,并且返回给用户。
MySQL SELECT 执行的具体步骤
标签: