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可以。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM