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
