大家在写MySQL的过程中,可能有时候会理解不了一些语句的执行过程,比如说是不清楚语句的执行先后顺序,我虽然写mysql不是很多,但是仔细想过这个问题,其中很重要的一点就是,为什么where就要紧紧跟在from的后面,想过这些问题,与大家分享一下
首先在写MySQL语句的一般顺序是
SELECT...... ,.....,......
FROM.....(LEFT/RIGHT)JOIN......ON (SQL99语法)(若有多张表则写出多表的连接条件)
[FROM ......,......,......(SQL92语法)]
JOIN......ON......
WHERE......AND...(过滤条件)
GROUP BY......(按照某种方式进行分组)
HAVING......(过滤条件,与WHERE类似,但一般用在用GROUP BY分完组的情况下)
ORDER BY......(DESC/ASC)(将数据升序或降序排列)
LIMIT......(限制条件)
而这个执行的顺序可以理解为:
FROM ....,.....,......------> ON ------>(LEFT/RIGHT JOIN) ----->WHERE ---->GROUP BY----->HAVING------>SELECT------>DISTINCT------>ORDER BY------>LIMIT.
执行原理:
首先上来就是FROM,从指定的某张表开始,后面的on指明连接多表的条件(若存在多表),再关注是否是左外或右外连接,接下来该where了,进行过滤数据(在这里举个例子,比如说在一个部门中,你只需要某些数据或者是某几个数据,从这张表中查到后进行过滤然后再继续执行下一步操作),接下来是GROUP BY,将过滤好的数据按照某种标准进行分组,分成几个小组,紧接着根据这几个小组看要满足哪一种条件进行过滤,接下来该SELECT接下来是从满足这些条件的数据或者是小组中选取特定的字段(其实是更缩小了范围,将满足题意的字段显示出来),经过上述一系列操作以后其实要找的字段已将找好了,DISTINCT为之后数据去重,执行order by进行排序,最后limit看用不用分页显示,后三种主要起的是辅助作用。
如有不足的地方,欢迎大家留言指出,小编会及时回复大家进行订正,希望这篇文章对大家有所帮助。