03.SQL高級查詢_分組:html
1).需求:一條查詢,查詢出每種商品的最高價格數據庫
2).分組的命令:group by 分組字段函數
3).實現上例:學習
select category_id,max(price) from product group by category_id;orm
查詢順序:先分組,再聚合htm
4).注意事項:blog
分組查詢的結果最多隻能包含:分組列,聚合結果,不能包含其餘字段。排序
5).練習1:索引
需求:查詢每一個生產日期的商品的數量是多少?ci
select proDate,count(*) from product group by proDate;
6).練習2:
有以下學員信息表:
編號 姓名 性別 年齡 科目
1 張三 男 22 JavaEE
2 李四 女 18 UI
3 王五 男 23 JavaEE
4 週六 女 21 JavaEE
5 趙四 女 17 IOS
需求1:每科目學員的最大年齡是多少?
select 科目,max(年齡) from 學員信息表 group by 科目
需求2: 每科目的總人數是多少?
select 科目,count(*) from 學員信息表 group by 科目
需求3: 一個查詢顯示出每科目的男同窗和女同窗分別有多少人?
1).先想出查詢結果是什麼樣的:
科目 性別 人數
JavaEE 男 2
JavaEE 女 1
UI 男 0
UI 女 1
IOS 男 0
IOS 女 1
2).對多列進行分組:
select 科目,性別,count(*) from 學員信息表 group by 科目, 性別;//先按第一列分組,而後再按第二列進行分組
7).目前學習過的語句的編寫順序:
select 篩選字段 from 表名 where 條件 group by 分組字段 order by 排序字段;
執行順序:
1).from
2).where
3).group by
4).若是有聚合函數,計算聚合的結果
5).select
6).order by
04.SQL高級查詢_having子句:
1).需求:查詢每種商品的最高價格,要求結果只顯示最大價格大於5000元的結果,你可能會想這樣寫:
SELECT category_id,MAX(price) FROM product where max(price) > 5000 GROUP BY category_id ORDER BY MAX(price);
上述語句錯誤,由於where先執行,max()後執行,當where執行時,max()尚未結果,因此此語句錯誤。
2).因爲where不能對聚合後的結果進行篩選,要對聚合後的結果進行篩選要使用:having語句
select category_id , max(price) from product group by category_id having max(price) > 5000 order by max(price);
05.SQL高級查詢_分頁查詢:
1).分頁查詢語句:
select ... from ... limit m,n;
說明:
1).m : 表示從第幾條記錄開始取--記錄的索引值(第一條記錄的索引是0)。計算方式:(當前頁- 1) * 每頁顯示條數
2).n : 表示取幾條記錄;
2).例如:查詢product表,每頁4條
#第一頁數據:
select * from product limit 0,4;
select * from product limit (1 - 1) * 4 , 4
#第二頁數據:
SELECT * FROM product LIMIT 4,4;
select * from product limit (2 - 1) * 4 , 4
#第三頁數據:
SELECT * FROM product LIMIT 8,4;
select * from product limit (3 - 1) * 4 , 4
#第四頁數據:
SELECT * FROM product LIMIT 12,4;
select * from product limit (4 - 1) * 4 , 4
3).注意:
1).m和n的值若是是負數、浮點數就會拋異常。
2).其它狀況若是超出範圍,不拋異常,只是無結果而已;
06.SQL的備份與恢復:
1).備份數據庫的做用:
1).備份數據,防止數據庫軟件發生異常,致使數據丟失。