自学内容网 自学内容网

MySQL-关键字执行顺序

💖简介

MySQL中,SQL查询语句的执行遵循一定的逻辑顺序,即使这些关键字在SQL语句中的物理排列可能有所不同。

🌟语句顺序

(8) SELECT (9) DISTINCT<select_list>
(1) FROM <left_table>
(3) <join_type> JOIN <right_table>
(2) ON <join_condition>
(4) WHERE <where_condition>
(5) GROUP BY <group_by_list>
(6) WITH {CUBE|ROLLUP}
(7) HAVING <having_condition>
(10) ORDER BY <order_by_list>
(11) LIMIT <offset,limit_number>

✨执行顺序

  1. from

from子句中的左表<left_table>和右表<right_table>执行笛卡尔积,得到虚拟表VT1

  1. on

对前面生成的虚拟表VT1进行ON筛选,符合条件的会被记录到虚拟表VT2中。

  1. join

如果是OUT JOIN,那么将保留表中(如左表或者右表)未匹配的行作为外部行添加到虚拟表VT2中,从而产生虚拟表VT3

  1. WHERE

对步骤3产生的虚拟表VT3进行过滤,只有符合条件<where_condition>的记录才会插入新的虚拟表VT4

  1. group by

根据group by子句中的列,对步骤4的记录进行分组操作得到虚拟表VT5

  1. with {CUBE|ROLLUP}

如果指定了ROLLUP选项,将创建一个额外的记录添加到虚拟表VT5的最后,并生成虚拟表VT6

  1. HAVING

对虚拟表VT6进行 HAVING 条件过滤,只有符合的记录才会被插入到虚拟表VT7中;

  1. Select

Select中指定的列从上一步产生的虚拟表中选出,插入虚拟表VT8

  1. Distinct

如果在查询中指定了distinct子句,则会创建一张内存临时表VT9

  1. Order by

根据order by指定的列对上一步输出的虚拟表进行排列,返回新的虚拟表VT10

  1. Limit

选出指定位置开始的指定行数据,生成虚拟表VT11,并返回结果


结果


原文地址:https://blog.csdn.net/zk_tww/article/details/143906067

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!