对于数据库开发人员来讲,打交道最多的莫过于sql语句,今天King同学就跟大家聊聊Oracle的sql语句。
1.五个核心的sql语句:①select语句(开发中百分之99的工作在写select)。②from子句(告诉数据库,数据来源)③where子句(根据条件限制返回的结果记录)④group by(在进行完条件筛选后的聚合操作)⑤having(对聚合后的结果集进行过滤)。以上就是sql语句中的基本组成,例如:select a,sum(b) as column_c from table t where t.a >= 100 group by a having column_c = 5;
2.提到了sql的五个核心语句,那么sql到底是怎么执行的呢(我相信很多做了多年开发的人也未必知道)?那么下面我们就来看下sql的执行顺序以便后期我们更好的对性能进行优化(考虑join的情况):Step1:from子句(首先让数据库知道数据的来源是哪个),在这个过程中,oracle会进行一系列的校验(是否具有访问权限,对象是否存在等);Step2:join,也就是关联,出现多表关联的情况,在校验通过后,会先对多表进行扫描,在这个过程中必须先了解下笛卡尔积的概念(笛卡尔积就是说两个集合A和B,集合A中有m个元素,集合B中有n个元素,而它们的笛卡尔积结果就是m*n),同样的道理,在join的过程中如果X表和Y表分表有m条和n条记录那么join的结果就是m*n(具体后面再讲)。Step3:join结束之后就是on子句,on的作用是在产生笛卡尔积的基础上只返回符合条件的结果集(在开发过程中切记不要忘记on,否则代价是惨重的)。Step4:where子句,在开发过程中,开发人员关心的只是符合业务需求的结果集,而where的主要工作就是如此,在进行完基本校验之后,优先执行where子句可以大大缩减数据量方便提升性能,这样就能很好的理解数据库为何将where放在校验结束后的第一个执行了。Step5:group by语句,对符合条件的数据进行聚合操作。Step6:having子句,对返回的结果进行过滤(与where条件的区别在以后讲解)。Step7:select 子句,返回查询的结果集。以上就是sql的执行顺序。

今天就与大家分享到这儿,如果大家有兴趣进行oracle的深入学习,请添加King的qq:156937648。非常欢迎各位能加入oracle的学习中来一切进步。明天将继续与大家进行oracle相关知识的分享,记得关注哦。




