查詢語句-單表查詢
回顧:單表查詢
一、選擇表中的若干列
二、選擇表中的若干元組
三、對查詢結(jié)果排序
四、使用集函數(shù)
五、對查詢結(jié)果分組
查詢語句-單表查詢
三、對查詢結(jié)果排序
使用ORDER BY子句
可以按一個或多個屬性列排序
升序:ASC;降序:DESC;缺省值為升序
當排序列含空值時
ASC:排序列為空值的元組后顯示
DESC:排序列為空值的元組先顯示
查詢語句-單表查詢
[例24] 查詢選修了3號課程的學生的學號及其成績,查詢結(jié)果按分數(shù)降序排列。
SELECT Sno,Grade
FROM SC
WHERE Cno = ’ 3 ’
ORDER BY Grade DESC;
查詢語句-單表查詢
[例25] 查詢?nèi)w學生情況,查詢結(jié)果按所在系的系號升序排列,同一系中的學生按年齡降序排列。
SELECT *
FROM Student
ORDER BY Sdept,Sage DESC;
查詢語句-單表查詢
四、使用集函數(shù)
五類主要集函數(shù)
計數(shù)
COUNT([DISTINCT|ALL] *)
COUNT([DISTINCT|ALL] <列名>)
計算總和
SUM([DISTINCT|ALL] <列名>)
計算平均值
AVG([DISTINCT|ALL] <列名>)
查詢語句-單表查詢
求大值
MAX([DISTINCT|ALL] <列名>)
求小值
MIN([DISTINCT|ALL] <列名>)
DISTINCT短語:在計算時要取消指定列中的重復(fù)值
ALL短語:不取消重復(fù)值
ALL為缺省值
查詢語句-單表查詢
[例26] 查詢學生總?cè)藬?shù)。
SELECT COUNT(*)
FROM Student;
[例27] 查詢選修了課程的學生人數(shù)。
SELECT COUNT(DISTINCT Sno)
FROM SC;
注:用DISTINCT以避免重復(fù)計算學生人數(shù)
查詢語句-單表查詢
[例28] 計算1號課程的學生平均成績。
SELECT AVG(Grade)
FROM SC
WHERE Cno= ’ 1 ’;
[例29] 查詢選修1號課程的學生高分數(shù)。
SELECT MAX(Grade)
FROM SC
WHER Cno= ’ 1 ’;
查詢語句-單表查詢
五、對查詢結(jié)果分組
使用GROUP BY子句分組
細化集函數(shù)的作用對象
未對查詢結(jié)果分組,集函數(shù)將作用于整個查詢結(jié)果
對查詢結(jié)果分組后,集函數(shù)將分別作用于每個組
查詢語句-單表查詢
[例30] 求各個課程號及相應(yīng)的選課人數(shù)。
SELECT Cno,COUNT(Sno)
FROM SC
GROUP BY Cno;
結(jié)果
Cno COUNT(Sno)
1 22
2 34
3 44
4 33
5 48
查詢語句-單表查詢
對查詢結(jié)果分組的說明
GROUP BY子句的作用對象是查詢的中間結(jié)果表
分組方法:按指定的一列或多列值分組,值相等的為一組
使用GROUP BY子句后,SELECT子句的列名列表中只能出現(xiàn)分組屬性和集函數(shù)
查詢語句-單表查詢
使用HAVING短語篩選終輸出結(jié)果
[例31] 查詢選修了3門以上課程的學生學號。
SELECT Sno
FROM SC
GROUP BY Sno
HAVING COUNT(*) >3;
查詢語句-單表查詢
[例32] 查詢有3門以上課程是90分以上的學生的學號及(90分以上的)課程數(shù)
SELECT Sno, COUNT(*)
FROM SC
WHERE Grade>=90
GROUP BY Sno
HAVING COUNT(*)>=3;
回顧:單表查詢
一、選擇表中的若干列
二、選擇表中的若干元組
三、對查詢結(jié)果排序
四、使用集函數(shù)
五、對查詢結(jié)果分組
查詢語句-單表查詢
三、對查詢結(jié)果排序
使用ORDER BY子句
可以按一個或多個屬性列排序
升序:ASC;降序:DESC;缺省值為升序
當排序列含空值時
ASC:排序列為空值的元組后顯示
DESC:排序列為空值的元組先顯示
查詢語句-單表查詢
[例24] 查詢選修了3號課程的學生的學號及其成績,查詢結(jié)果按分數(shù)降序排列。
SELECT Sno,Grade
FROM SC
WHERE Cno = ’ 3 ’
ORDER BY Grade DESC;
查詢語句-單表查詢
[例25] 查詢?nèi)w學生情況,查詢結(jié)果按所在系的系號升序排列,同一系中的學生按年齡降序排列。
SELECT *
FROM Student
ORDER BY Sdept,Sage DESC;
查詢語句-單表查詢
四、使用集函數(shù)
五類主要集函數(shù)
計數(shù)
COUNT([DISTINCT|ALL] *)
COUNT([DISTINCT|ALL] <列名>)
計算總和
SUM([DISTINCT|ALL] <列名>)
計算平均值
AVG([DISTINCT|ALL] <列名>)
查詢語句-單表查詢
求大值
MAX([DISTINCT|ALL] <列名>)
求小值
MIN([DISTINCT|ALL] <列名>)
DISTINCT短語:在計算時要取消指定列中的重復(fù)值
ALL短語:不取消重復(fù)值
ALL為缺省值
查詢語句-單表查詢
[例26] 查詢學生總?cè)藬?shù)。
SELECT COUNT(*)
FROM Student;
[例27] 查詢選修了課程的學生人數(shù)。
SELECT COUNT(DISTINCT Sno)
FROM SC;
注:用DISTINCT以避免重復(fù)計算學生人數(shù)
查詢語句-單表查詢
[例28] 計算1號課程的學生平均成績。
SELECT AVG(Grade)
FROM SC
WHERE Cno= ’ 1 ’;
[例29] 查詢選修1號課程的學生高分數(shù)。
SELECT MAX(Grade)
FROM SC
WHER Cno= ’ 1 ’;
查詢語句-單表查詢
五、對查詢結(jié)果分組
使用GROUP BY子句分組
細化集函數(shù)的作用對象
未對查詢結(jié)果分組,集函數(shù)將作用于整個查詢結(jié)果
對查詢結(jié)果分組后,集函數(shù)將分別作用于每個組
查詢語句-單表查詢
[例30] 求各個課程號及相應(yīng)的選課人數(shù)。
SELECT Cno,COUNT(Sno)
FROM SC
GROUP BY Cno;
結(jié)果
Cno COUNT(Sno)
1 22
2 34
3 44
4 33
5 48
查詢語句-單表查詢
對查詢結(jié)果分組的說明
GROUP BY子句的作用對象是查詢的中間結(jié)果表
分組方法:按指定的一列或多列值分組,值相等的為一組
使用GROUP BY子句后,SELECT子句的列名列表中只能出現(xiàn)分組屬性和集函數(shù)
查詢語句-單表查詢
使用HAVING短語篩選終輸出結(jié)果
[例31] 查詢選修了3門以上課程的學生學號。
SELECT Sno
FROM SC
GROUP BY Sno
HAVING COUNT(*) >3;
查詢語句-單表查詢
[例32] 查詢有3門以上課程是90分以上的學生的學號及(90分以上的)課程數(shù)
SELECT Sno, COUNT(*)
FROM SC
WHERE Grade>=90
GROUP BY Sno
HAVING COUNT(*)>=3;

