背景:修改SQL的时候呢,需要理解SQL各个部分的执行顺序才能继续下一步的工作。不然改了一通,行不行还另说…但是,很遗憾,我现在还没有时间或者说没有能力去读看MySQL源码之类的,so,请路过的大佬们多多指教。
先写一个SQL(主要就是为了便于看到各个字段在SQL语句中的位置,想看表结构的去这(没错,这里有那张表))。
SELECT * FROM (
SELECT DISTINCT * FROM student WHERE sclass IS NOT NULL GROUP BY sage HAVING sage >= 22
UNION
SELECT DISTINCT * FROM teacher WHERE tclass IS NOT NULL GROUP BY tage HAVING tage > 20
) temp
ORDER BY sage ASC;
美化一番之后(我也没见有多美啊)。
接下来是我从各个大佬那里搞来的执行顺序,很可惜我还是不知其所以然。但是,不知其所以然就不管了吗?本菜鸡怎能和那样的人一样呢?本菜鸡就算不懂这是个啥么东西,也要背过它,等过一段时间本菜鸡还是会回来的。好,上法宝!!!
①from :这是老大哥,先问问数据你从哪里搞,
②where ③group by ④having :来,小老弟,说说你的要求
⑤select :好的嘛!挑好了是吧!
⑥union : 什么?你还有业务。好吧!(注意union 连接的两个查询列数一定要一致, 查询派生表的数据的时候必须要为派生表起一个别名。)
⑦order by : 来,我给你排个序!
大体上意思就是这个意思。觉得我说的不对的,来,给你粉笔,就在下面,咱们聊一聊(欢迎指教)。