您的位置:首页 > 数据库 > MySQL

SQL语句执行顺序(MySQL)

2016-03-14 20:58 956 查看
首先先定义一个sql语句如下:

select distinct student.id,name,max(age),course
from student left join course on student.id = course.stu_id
where student.id > 3
group by name having max(age) > 23
order by age limit 1;




在这些SQL语句的每一步执行过程中,都会产生一个虚拟表,用来保存SQL语句的执行结果。

1.将表student和表course进行笛卡尔积,形成虚拟表v1;



2.执行on连接条件,筛选出满足条件student.id = course.stu_id的虚拟表v2;



3.因为是left join 所以在步骤2 基础上添加student表的其余数据形成虚拟表v3;



4.执行where条件,筛选符合的条件形成虚拟表v4



在使用WHERE子句时,需要注意以下两点:

(1)由于还没执行group by,因此现在还不能在where中使用where xx=min(col)这类对分组统计的过滤;



(2)由于还没执行select,因此在select中使用列的别名也是不被允许的,如:



5.执行group by分组,形成虚拟表v5



6.执行select语句,执行聚集函数,最后执行distinct,形成虚拟表v6



7.执行having最后筛选,形成虚拟表v7



8.使用order by排序,形成虚拟表v8



9执行limit,最后形成结果表



ps:数据填的不太好,最后两步没体现出来,但就是这么个意思,不要在意这些细节。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: