您现在的位置是:网站首页 > 心得笔记

SQL的执行顺序

盛悦2022-04-19526人围观
简介一条完整的SQL语句在执行的过程中会被拆分为多个SQL子句,每个子句执行时都会产生虚拟表vt,但是最终结果只会返回最后一个虚拟表。

1、sql的执行顺序:

form->where->groupBy->having->select->order by


2、A leftjoin B

AB两表执行笛卡尔运算,运算结果形成一个结果集->按照On条件做筛选,形成一个新的结果集->以左连接为例,如果A中存在未匹配的行,那么把A中的这几行以外部行的形式加到上面的结果集中,形成新的结果集。


3、join语句的执行顺序

join查询的通用结构如下,SQL如下:
SELECT col,col2,col3...FROM A LEFT | RIGHT | INNER JOIN B ON < JOIN CONDITION > 
WHERE < WHERE CONDITION >;
执行顺序如下:
1、from
SQL语句是从from开始执行的,from是对左右两张表进行笛卡尔积,产生第一张虚拟表vt1.。如果左表中的记录行数是n,右表中的记录行数是m,那么笛卡尔积产生的虚拟表中的记录行数为n * m。
2、on
根据on的条件对vt1表进行筛选,将筛选后的结果保存到虚拟表vt2。
3、join
这一步主要是添加外部行,如果是左连接left join on,那么会先遍历左表中的每一行,然后不在vt2表中的记录将会被插入到vt2,其余字段会置为null,形成虚拟表vt3。如果是右连接right join on,那么会先遍历右表中的每一行,然后不在vt2表中的记录将会插入到vt2,其余字段会置为null。如果是内连接inner join on的话,则不会添加外部行。所产生的vt3表和vt2表是完全相同的。
4、where
对vt3表进行条件过滤,将筛选过滤后的结果保存到表vt4。
5、select
按照查询的字段,从vt4表中取出所需字段,输出到vt5表中,那么最终的返回结果就是vt5表。