导语:大三期间选修的数据库课程带我入了sql语句的门,但是实际应用场景中,发现有时候得到的结果,或者查询所花费的时间都不能达到预期效果,于是稍微研究了一下sql语句的执行顺序问题,感觉对于sql语句的书写更加有帮助了,下面是我总结的一点东西,但是可能不全面。
SELECT ( DISTINCT 查询字段) FROM (lefttable JOIN righttable ON()) WHERE(查询条件) GROUP BY(分组字段) HAVING(分组筛选条件) ORDER BY (排序字段) limit(分页参数);
一条select查询语句,差不多就是以上语句的某一个子集,然后他的一个执行顺序如下:
- FROM 子句组装来自不同数据源的数据
- ON关键字
- JOIN关键字
- WHERE 查询条件
- GROUP BY子句将数据划分为多个分组
- 使用聚合函数进行计算
- HAVING 子句筛选之前的分组
- SELECT关键字
- DISTINCT 关键字去重
- ORDER BY关键字排序
- limit 关键字分页
以上每个步骤都会产生一个虚拟表,该虚拟表被用作下一个步骤的输入