我们平时写sql的时候大家都知道基本该怎么写,写的是什么语义逻辑,但是其中select语句每一个关键字的执行顺序可能大家还有不知道的,今天看到的一个题目,就是问select的执行顺序;
其实这个过程大概的情况其实可以推理出来的
以下就是基本的推理过程:
1.你要有主表,也就要先执行from,这个是根基
2-3.然后辅助表的数据关联,关联的时候先有join,要连接什么表,然后就有了这么连接on;
这个是要排在group by,order by,where前面的,因为在group,order,where中你可以使用join中的数据,所以join肯定在前面
4.再然后就是where了,你要获取的全部数据在上面通过from和join都获取到了,要做第一步筛选,得到你想要的数据
5.再之后就是使用Group by进行分组,这个的顺序考虑从语义上,你现有你要分组的数据才能分组,前面的from,join,where等都是为了确定获取数据的
6.而后的having就是对你分组的数据再一次筛选,肯定是要在分组数据之后的
7.再往后select排在order by前面是因为order by的数据排序是要根据select中的内容来的,平时你可能没感觉,但是当你使用group by分组后,你会发现,select中没有字段是不能用来排序的,验证了select在order by之前
8.然后就是order by了对获取的数据进行指定规则的排序,前面的过程都完成才能对总数据进行排序,否则也没法排序
9.limit排在最后原因是,limit是要获取当前数据中指定范围内的数据,所以数据要先有序才能进行指定范围内数据获取,所以limit要在orderby之后
1 from->2 join->3 on->4 where->5 group by ->6 having ->7 select->8 order by->9 limit