一、SQL 語句進行排序
ORDER BY 子句,可以將查詢出的結果進行排序(排序只是顯示方式,不會影響數據庫中數據的順序)
SELECT 字段名 FROM 表名 WHERE 字段= ORDER BY 字段名 [ASC|DESC];
ASC: 升序,默認值
DESC: 降序
1.1 單列排序:
只按某一個字段進行排序,單列排序。
select * from student order by score desc;
1.2 組合排序:
同時對多個字段進行排序,如果第 1 個字段相等,則按第 2 個字段排序,依次類推。
組合排序的語法:SELECT 字段名 FROM 表名 WHERE 字段=值 ORDER BY 字段名 1 [ASC|DESC], 字段名 2 [ASC|DESC];
--查詢所有的數據 按照分數倒敘最高在最前面,年齡相同按照年紀正序,年齡越小在越前面
select * from student order by score desc , age asc;
二、聚合函數
max(列名) 求這一列的最大值
min(列名) 求這一列的最小值
avg(列名) 求這一列的平均值
count(列名) 統計這一列有多少條記錄
sum(列名) 對這一列求總和
語法:SELECT 聚合函數(列名) FROM 表名
-- 查詢學生總數
select count(id) as 總人數 from student;
select count(*) as 總人數 from student;
對於 NULL 的記錄不會統計,建議如果統計個數則不要使用有可能為 null 的列,但如果需要把 NULL也統計進去呢?
-- 查詢 id 字段,如果為 null,則使用 0 代替
select ifnull(id,0) from student;
我們可以利用 IFNULL()函數,如果記錄為 NULL,給個默認值,這樣統計的數據就不會遺漏
select count(ifnull(id,0)) from student;
三、SQL 語句進行分組查詢
分組查詢是指使用 GROUP BY 語句對查詢信息進行分組,相同數據作為一組
語法:SELECT 字段 1,****字段 2... FROM 表名 GROUP BY 分組字段 [HAVING 條件****];
3.1 GROUP BY 怎么分組的?
將分組字段結果中相同內容作為一組,如按性別將學生分成 2 組。
GROUP BY 將分組字段結果中相同內容作為一組,並且返回每組的第一條數據,所以單獨分組沒什么用處。分組的目的就是為了統計,一般分組會跟聚合函數一起使用。
-----例子1: 按性別進行分組,求男生和女生數學的平均分(實際上是將每組的 score 求了平均,返回每組統計的結果)
注意:當我們使用某個字段分組,在查詢的時候也需要將這個字段查詢出來,否則看不到數據屬於哪組的
select sex, avg(score) from student group by sex;
------例子2:查詢男女各多少人
select sex, count(*) from student group by sex;
------例子3:查詢年齡大於 25 歲的人,按性別分組,統計每組的人數
**select sex, count(*) from student where age > 25 group by sex ; **
------ 例子4:查詢年齡大於 25 歲的人,按性別分組,統計每組的人數,並只顯示性別人數大於 2 的數據
只有分組后人數大於 2 的這組數據顯示出來
**select sex, count() from student where age > 25 group by sex having count()>2 ; **
3.2 having 與 where 的區別
where 子句 :
- 對查詢結果進行分組前,將不符合 where 條件的行去掉,即在分組之前過濾數據,即先過濾
再分組。
- where 后面不可以使用聚合函數
having 子句:
-
having 子句的作用是篩選滿足條件的組,即在分組之后過濾數據,即先分組再過濾。
-
having 后面可以使用聚合函數
題目:select product,sum(price) from orders group by product where sum(price) > 30;
運行有誤,group by 后面不能出現 where,使用 having
3.3 limit 語句
LIMIT 的作用就是限制查詢記錄的條數。
LIMIT 語法格式:LIMIT offset,length;
offset:起始行數,從 0 開始計數,如果省略,默認就是 0
length: 返回的行數
-- 查詢學生表中數據,從第 3 條開始顯示,顯示 6 條。
select * from student3 limit 2,6;
LIMIT 的使用場景:
分頁:比如我們登錄京東,淘寶,返回的商品信息可能有幾萬條,不是一次全部顯示出來。是一頁顯示固定的
條數。 假設我們每頁顯示 5 條記錄的方式來分頁。
-- 如果第一個參數是 0 可以省略寫:select * from student limit 5;