group by和order by的區別、having和where的用法與其執行順序


 order by 在英文里的意思就是行的排序方式,默認的為升序。order by 后面必須列出排序的字段名,

可以是多個字段名。

例:1、單一列屬性排序

默認排序: 

1 select *from s roder by sno;

select *from s order by sno desc

  

2、多個列屬性排序

選擇多個列屬性經行排序,然后排序的順序是,從左到右

,依次排序。如果前面列屬性有些是一樣的話,再按后面的列屬性排序。(在前面的列屬性優先級高)。

 

select *from s   order by 
 sname desc,sage desc 

    

 

首先按照sname降序排序,然后出現了XX一樣的,在按照sage降序排序。

 

 

group by 從英文里理解就是分組。SELECT子句的列名列表中只能出現分組屬性(比如:sno)或者有‘聚合函數’來配合才能使用。使用時至少需要一個分組  

標志字段。

什么是聚合函數?

像sum()、count()、avg()等都是“聚合函數”
使用group by 的目的就是要將數據分類匯總。

 

 

HAVING短語與WHERE子句的區別

1》WHERE子句作用於基表或視圖,從中選擇滿足條件的元組。

2》HAVING短語作用於組,從中選擇滿足條件的組。 

3》having只能用在group by之后,對分組后的結果進行篩選(即使用having的前提條件是分組)。 
4》.where肯定在group by 之前,即也在having之前。 
5》.where后的條件表達式里不允許使用聚合函數,而having可以。 

舉例:查詢選修了三門以上課程的學生學號:

1 select sno from sc group by sno having count(cno)>3  

查詢選修了3門以上課程,且所有課程成績都高於60分的學生學號及課程數

select sno , count(cno)  
from sc   
where grade > 60    
group by sno having count(cno) > 3  

  

 

 

 

四、當一個查詢語句同時出現了where,group by,having,order by的時候,執行順序和編寫順序是: 
1.執行where xx對全表數據做篩選,返回第1個結果集。 2.針對第1個結果集使用group by分組,返回第2個結果集。 
3.針對第2個結果集中的每1組數據執行select xx,有幾組就執行幾次,返回第3個結果集。 

4.針對第3個結集執行having xx進行篩選,返回第4個結果集。 5.針對第4個結果集排序。 

———————————————————————————————————————————————-

Group By 和 Having, Where ,Order by這些關鍵字是按照如下順序進行執行的:Where, Group By, Having, Order by。

———————————————————————————–

粗淺的理解的話,
SELECT的語法順序就是起執行順序

FROM 
WHERE (先過濾單表/視圖/結果集,再JOIN)
GROUP BY
HAVING (WHERE過濾的是行,HAVING過濾的是組,所以在GROUP之后)
ORDER BY

 


免責聲明!

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



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