sql篇 select from where group by having order by

        以前,自己总是记不住如何用group by,如何用order by,什么时候用group by,什么时候用order by,什么时候两者一起用,怎么用,谁先谁后,现在,我们就一起来说一下Select   from   where   groupby   having   order by 的那些事,简单的总结一下,加深一下自己的印象,也给有需要的人提供点资源

        Select   from   where   groupby   having   order by ,不用说,select from肯定是一起的,然后是where,然后是group by,having的前提是先分组,所以跟着group by,来的是分组之后的筛选条件。最后是从艺的数据集中select 字段,最最后,对已得的数据进行排序 

所以执行顺序依次是:

[sql] view plain copy
 
  1. from  
  2. Where  
  3. Group by  
  4. Having
  5. Select  
  6. Order by

1.执行where xx对全表数据做筛选,返回第1个结果集。 
2.针对第1个结果集使用group by分组,返回第2个结果集。 
3.针对第2个结集执行having xx进行筛选,返回第3个结果集。
4针对第3个结果集中的每1组数据执行select xx,有几组就执行几次,返回第4个结果集。 
5.针对第4个结果集排序
       其实说起来,我们的sql语句主要就是这几个加上一些聚合函数,嵌套用法什么的,在有一些什么case when语句,下面来个更形象的图文并茂

 数据源:

          

 先来一个比较另类的、简单的,组内排序

 

Select StudentName,LessonName,Result  from TestTable order byStudentName,LessonName,Result

 

     

       先执行Select StudentName,LessonName,Result from TestTable,然后根据StudentName排序,在此基础上再根据LessonName排序,在以上基础上再根据Result进行升序排序

another: 

select StudentName,SUM(Result) asResultField from TestTable where LessonName='语文' GROUP BYStudentName HAVING SUM(Result)>7 ORDER BY ResultField

       
       他的执行顺序是先执行筛选出LessonName=’语文’的,根据StudentName进行分组,在以分组基础上筛选Result之和大于7的数据,然后就是从已得数据集中select StudentName,SUM(Result) as ResultField,然后最后数据集根据总分大小升序排列

 这里面呢,其他的都挺简单,值得注意的是group by的用法: 

select 列a,聚合函数(聚合函数规范) from 表明 where 过滤条件 group by 列a ;  

select 列a,列b 聚合函数(聚合函数规范) from 表明 where 过滤条件 group by 列a , 列b

也就是说,我们从select里面展示的字段都是要用来分组的依据,如果是:

select 列a,列b 聚合函数(聚合函数规范) from 表明 where 过滤条件 group by 列a   

  

 

重:下面说一下having和where的用法区别:         

      1.having只能用在group by之后,对分组后的结果进行筛选(即使用having的前提条件是分组)。         

      2.where肯定在group by 之前,即也在having之前。         

      3.where后的条件表达式里不允许使用聚合函数,而having可以。

posted @ 2016-08-12 16:05  Double-Eggs  阅读(2504)  评论(0编辑  收藏  举报