第二節(jié)為大家介紹了數(shù)據(jù)的查詢唤反,這一小節(jié)為大家深入講解查詢過程中的數(shù)據(jù)分組和排序,分組關(guān)鍵字為:group by鸭津,排序關(guān)鍵字為:order by彤侍,過濾分組的關(guān)鍵字為:having;
group by:對查詢的數(shù)據(jù)按照某一類型進(jìn)行分組逆趋,group by 一般用在order by子句之前盏阶,where子句之后
order by:對查詢的數(shù)據(jù)進(jìn)行某一類進(jìn)行排序 或 對分組后的數(shù)據(jù)進(jìn)行排序
having:對分組后的數(shù)據(jù)進(jìn)行條件過濾
繼續(xù)以上一章創(chuàng)建的客戶表為例,表名:customer闻书,表有列:cus_id,cus_no,cus_name,cus_age,cus_adds名斟。
eg:查詢客戶的基本信息,以id進(jìn)行分組:select?cus_id,count(*) as num from?customer group by?cus_id;? num表示對應(yīng)的cus_id有多少客戶數(shù)據(jù)魄眉,查詢結(jié)果如下
如果分組的列中有null值砰盐,那么null將作為一個分組返回,如果有多個行都為null值坑律,它們將會被分為一組返回岩梳。group by 必須用在where子句之后,order by子句之前晃择。
除group by可以進(jìn)行分組過濾數(shù)據(jù)外冀值,having也可以進(jìn)行過濾分組;having過濾和where類似宫屠,唯一區(qū)別在于where是過濾行列疗,而having是過濾分組,可看以下列子:
eg:查詢以id分組后數(shù)據(jù)總量兩條以上的數(shù)據(jù):select?cus_id,count(*) as num from?customer group by?cus_id having count(*)?>= '2'; 滿足條件的就只有一條數(shù)據(jù)
order by主要用于數(shù)據(jù)排序的情況激况,當(dāng)查詢數(shù)據(jù)量較大時作彤,有序的數(shù)據(jù)會讓人更好地直觀觀察數(shù)據(jù)膘魄,order by 關(guān)鍵字用于對結(jié)果集按照一個列或者多個列進(jìn)行排序。此外order by 關(guān)鍵字默認(rèn)按照升序?qū)τ涗涍M(jìn)行排序竭讳。如果需要按照降序?qū)τ涗涍M(jìn)行排序创葡,您可以使用 DESC 關(guān)鍵字。使用方法如下
eg:查詢客戶的基本信息绢慢,以年齡進(jìn)行排序灿渴,默認(rèn)升序:select?* from?customer order?by?cus_age;
eg:查詢客戶的基本信息,以年齡進(jìn)行排序胰舆,降序方式排序:select?* from?customer?order?by?cus_age DESC;
升序使用ASC骚露,降序使用DESC,系統(tǒng)默認(rèn)為升序缚窿。注意兩者之間的差異
當(dāng)對多個列進(jìn)行排序時棘幸,order by使用方法如下:
order by A,B? ?--過濾數(shù)據(jù)都是默認(rèn)按升序排列
order by A desc,B? ?--過濾數(shù)據(jù)時 A 降序,B 升序排列
order by A ,B desc? ?--過濾數(shù)據(jù)時 A 升序倦零,B 降序排列
desc?或者?asc?只對它緊跟著的第一個列名有效误续,其他不受影響,仍然是默認(rèn)的升序扫茅。
本小節(jié)介紹排序分組就到這里了蹋嵌,通過多分組排序的介紹,知道了group by葫隙,order by栽烂,having三者之間的差異和區(qū)別,大家可以在自己電腦多編寫幾個腳本恋脚,深入了解三個關(guān)鍵字的使用腺办。