一般的后端开发者写sql,这些基础语句就够用了(SELECT[DISTINCT],FROM,WHERE,GROUP BY,HAVING,UNION,ORDER BY),至于更复杂的基本都是更加专业的数据库开发工程师(DBD)来完成了,毕竟随着语句的逻辑越复杂,已经不是简单的实现功能,更多涉及到性能,实行方式有很多,索引,分库等等,这不是本章讨论的范畴,我们这里只讲一讲基础的sql语句执行顺序问题,面试中也是会经常问到。
常用的关键字:
-
SELECT[DISTINCT]
-
FROM
-
WHERE
-
GROUP BY
-
HAVING
-
UNION
-
ORDER BY
开始推导
我们把表类比为商店:
1,现在你的领导让你去买水,你的第一反应因该是什么,当然是去哪个商店买水(FROM(来自…))
2,现在你出门了,来到了商店门口 ,找到商店,跟商店老板说的要的是矿泉水(WHERE:要什么)
3,这时商店老板告诉你商店里有好几种品牌的矿泉水,你看了看货架,在心中计算了一下每个品牌有几瓶(GROUP BY:统计)
4,你想起出门的时候老板告诉你要你买五瓶同一品牌的水,你一看(COUNT(*)等函数),只有农夫山泉超过了五瓶(HAVING:哪些符合)
5,那就买五瓶农夫山泉回去(SELECT:最终结果)
6,这时,一个同事给你打电话,让你帮忙带一瓶饮料回去,你又按照刚才的流程又回去买了瓶饮料,你拎着两袋水回去了(UNION:连接一起)
7,然后回去公司,把第一袋给了老板,把第二袋给了同事(ORDER BY: 顺序)
至此,我们推导出sql的执行顺序
-
FROM
-
WHERE
-
GROUP BY
-
HAVING(以及sql中的函数如 count(*))
-
SELECT
-
DISTINCT
-
UNION
-
ORDER BY
是不是非常简单,可见代码的逻辑也是来源于生活 。
这里做一个补充,上面的关键字HAVING是一个分水岭,从这里开始这次查询的结果总量不再变化。这里做一个简单的曲线图描述查询到数据的变化趋势。union不属于这一次查询,是另一次。