?前一段時間的面試,問道這個問題,不太清楚了,感覺有必要來總結一下。話不多說,直接開始吧!
一、order by的用法使用order by,一般是用來,依照查詢結果的某一列(或多列)屬性,進行排序(升序:ASC;降序:DESC;默認為升序)。
當排序列含空值時:
ASC:排序列為空值的元組最后顯示。
DESC:排序列為空值的元組最先顯示。
為了好記憶,我的理解是,可以把null值看做無窮大,因為不知道具體為多少。然后去考慮排序,asc升序null肯定在最后,而desc降序,null肯定在最前面。(我的想法,輕噴。。。)
1》單一列屬性排序
舉例1:默認排序:
lect * from s
lect * from s order by sno desc
按照sno降序:
2》多個列屬性排序
選擇多個列屬性進行排序,然后排序的順序是,從左到右,依次排序。
如果前面列屬性有些是一樣的話,再按后面的列屬性排序。(前提一定要滿足前面的屬性排序,因為在前面的優(yōu)先級高)。
舉例2:
lect * from sorder by sname desc, sage desc
首先按照sname降序排序,然后出現(xiàn)了xx一樣的,在按照sage降序排序。(默認sage是升序)。
如果最開始使用sno排序,
lect * from sorder by sno desc, sage asc
必須先滿足前面列屬性的排序(sno在前優(yōu)先級高)。才會去考慮后續(xù)列屬性的排序。
二、group by的用法group by按照查詢結果集中的某一列(或多列),進行分組,值相等的為一組。
1》細化集函數(shù)(count,sum,avg,max,min)的作用對象:
未對查詢結果分組,集函數(shù)將作用于整個查詢結果。
對查詢結果分組后,集函數(shù)將分別作用于每個組。
例子3:
求各個課程號及相應的選課人數(shù):
SELECT cno,count(sno) from sc
對整個表進行count。
SELECT cno,count(sno) from sc group by cno
對分組的表進行count
sc表內(nèi)容如下:
2》GROUP BY子句的作用對象是查詢的中間結果表
分組方法:按指定的一列或多列值分組,值相等的為一組。
使用GROUP BY子句后,SELECT子句的列名列表中只能出現(xiàn)分組屬性(比如:sno)和集函數(shù)(比如:count())。
lect sno,count(cno) from sc group by sno
3》多個列屬性進行分組舉例:
lect cno,grade,count(cno) from sc group by cno,grade
cno為1且成績?yōu)?6的,有3個
4》使用HAVING短語篩選最終輸出結果
只有滿足HAVING短語指定條件的組才輸出。
HAVING短語與WHERE子句的區(qū)別:作用對象不同。
1》WHERE子句作用于基表或視圖,從中選擇滿足條件的元組。
2》HAVING短語作用于組,從中選擇滿足條件的組。
舉例:
查詢選修了3門以上課程的學生學號:
lect sno from sc group by sno having count(cno)>3
舉例:
查詢選修了3門以上課程,且所有課程成績都高于60分的學生學號及課程數(shù)
lect sno , count(cno)from scwhere grade > 60group by sno having count(cno) > 3
好的,先就總結到此吧,后續(xù)還會繼續(xù)。由于水平有限,難免有不對的地方,還請指教。加油!!!
本文發(fā)布于:2023-02-28 20:03:00,感謝您對本站的認可!
本文鏈接:http://m.newhan.cn/zhishi/a/167765254177699.html
版權聲明:本站內(nèi)容均來自互聯(lián)網(wǎng),僅供演示用,請勿用于商業(yè)和其他非法用途。如果侵犯了您的權益請與我們聯(lián)系,我們將在24小時內(nèi)刪除。
本文word下載地址:groupby(groupby的用法及原理詳解).doc
本文 PDF 下載地址:groupby(groupby的用法及原理詳解).pdf
| 留言與評論(共有 0 條評論) |