【正文】
為: SELECT Sname, Ssex FROM Student WHERE Sdept= 39。 IS 39。 OR Sdept= 39。 MA39。 OR Sdept= 39。 CS 39。; 2021/11/10 An Introduction to Database System 改寫 [例 10] [例 10] 查詢年齡在 20~23歲(包括 20歲和 23歲)之間的學(xué)生的姓名、系別和年齡 。 SELECT Sname, Sdept, Sage FROM Student WHERE Sage BETWEEN 20 AND 23; 可改寫為: SELECT Sname, Sdept, Sage FROM Student WHERE Sage=20 AND Sage=23; 2021/11/10 An Introduction to Database System 三、對查詢結(jié)果排序 使用 ORDER BY子句 ? 可以按一個或多個屬性列排序 ? 升序: ASC;降序: DESC;缺省值為升序 當(dāng)排序列含空值時 ? ASC:排序列為空值的元組最后顯示 ? DESC:排序列為空值的元組最先顯示 2021/11/10 An Introduction to Database System 對查詢結(jié)果排序(續(xù)) [例 24] 查詢選修了 3號課程的學(xué)生的學(xué)號及其成績 , 查詢結(jié)果按分?jǐn)?shù)降序排列 。 SELECT Sno, Grade FROM SC WHERE Cno= 39。 3 39。 ORDER BY Grade DESC; 2021/11/10 An Introduction to Database System 查詢結(jié)果 Sno Grade 95010 95024 95007 92 95003 82 95010 82 95009 75 95014 61 95002 55 2021/11/10 An Introduction to Database System 對查詢結(jié)果排序(續(xù)) [例 25] 查詢?nèi)w學(xué)生情況 , 查詢結(jié)果按所在系的系號升序排列 , 同一系中的學(xué)生按年齡降序排列 。 SELECT * FROM Student ORDER BY Sdept, Sage DESC; 2021/11/10 An Introduction to Database System 四、使用集函數(shù) 5類主要集函數(shù) ? 計數(shù) COUNT( [DISTINCT|ALL] *) COUNT( [DISTINCT|ALL] 列名 ) ? 計算總和 SUM( [DISTINCT|ALL] 列名 ) ? 計算平均值 AVG( [DISTINCT|ALL] 列名 ) 2021/11/10 An Introduction to Database System 使用集函數(shù)(續(xù)) 求最大值 MAX( [DISTINCT|ALL] 列名 ) 求最小值 MIN( [DISTINCT|ALL] 列名 ) – DISTINCT短語:在計算時要取消指定列中的重復(fù)值 – ALL短語:不取消重復(fù)值 – ALL為缺省值 2021/11/10 An Introduction to Database System 使用集函數(shù) (續(xù)) [例 26] 查詢學(xué)生總?cè)藬?shù) 。 SELECT COUNT(*) FROM Student; [例 27] 查詢選修了課程的學(xué)生人數(shù) 。 SELECT COUNT(DISTINCT Sno) FROM SC; 注:用 DISTINCT以避免重復(fù)計算學(xué)生人數(shù) 2021/11/10 An Introduction to Database System 使用集函數(shù) (續(xù)) [例 28] 計算 1號課程的學(xué)生平均成績 。 SELECT AVG(Grade) FROM SC WHERE Cno= 39。 1 39。; [例 29] 查詢選修 1號課程的學(xué)生最高分?jǐn)?shù) 。 SELECT MAX(Grade) FROM SC WHER Cno= 39。 1 39。; 2021/11/10 An Introduction to Database System 五、對查詢結(jié)果分組 使用 GROUP BY子句分組 細(xì)化集函數(shù)的作用對象 ? 未對查詢結(jié)果分組 , 集函數(shù)將作用于整個查詢結(jié)果 ? 對查詢結(jié)果分組后,集函數(shù)將分別作用于每個組 2021/11/10 An Introduction to Database System 使用 GROUP BY子句分組 [例 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 2021/11/10 An Introduction to Database System 對查詢結(jié)果分組 (續(xù)) ? GROUP BY子句的作用對象是查詢的中間結(jié)果表 ? 分組方法:按指定的一列或多列值分組 , 值相等的為一組 ? 使用 GROUP BY子句后 , SELECT子句的列名列表中只能出現(xiàn)分組屬性和集函數(shù) 2021/11/10 An Introduction to Database System 使用 HAVING短語篩選最終輸出結(jié)果 [例 31] 查詢選修了 3門以上課程的學(xué)生學(xué)號 。 SELECT Sno FROM SC GROUP BY Sno HAVING COUNT(*) 3; 2021/11/10 An Introduction to Database System 例題 [例 32] 查詢有 3門以上課程是 90分以上的 學(xué)生的學(xué)號及 ( 90分以上的 ) 課程數(shù) SELECT Sno, COUNT(*) FROM SC WHERE Grade=90 GROUP BY Sno HAVING COUNT(*)=3。 2021/11/10 An Introduction to Database System 使用 HAVING短語篩選最終輸出結(jié)果 ? 只有滿足 HAVING短語指定條件的組才輸出 ? HAVING短語與 WHERE子句的區(qū)別:作用對象不同 ? WHERE子句作用于基表或視圖 , 從中選擇滿足條件的元組 。 ? HAVING短語作用于組 , 從中選擇滿足條件的組 。 2021/11/10 An Introduction to Database System 下課了。 休息一會兒。