【正文】
OR來聯(lián)結多個查詢條件 ? AND的優(yōu)先級高于 OR ? 可以用括號改變優(yōu)先級 ?可用來實現(xiàn)多種其他謂詞 ? [NOT] IN ? [NOT] BETWEEN … AND … An Introduction to Database System 例題 ?[例 23] 查詢計算機系年齡在 20歲以下的學生姓名。 SELECT Sname FROM Student WHERE Sdept= 39。CS39。 AND Sage20; An Introduction to Database System 改寫 [例 12] ? [例 12] 查詢信息系( IS)、數(shù)學系( MA)和計算機科學系( CS)學生的姓名和性別。 SELECT Sname, Ssex FROM Student WHERE Sdept IN ( 39。IS39。, 39。MA39。, 39。CS39。 ) ? 可改寫為: SELECT Sname, Ssex FROM Student WHERE Sdept= 39。 IS 39。 OR Sdept= 39。 MA39。 OR Sdept= 39。 CS 39。; An Introduction to Database System 改寫 [例 10] ? [例 10] 查詢年齡在 20~23歲(包括 20歲和 23歲)之間的學生的姓名、系別和年齡。 SELECT Sname, Sdept, Sage FROM Student WHERE Sage BETWEEN 20 AND 23; ? 可改寫為: SELECT Sname, Sdept, Sage FROM Student WHERE Sage=20 AND Sage=23; An Introduction to Database System 三、對查詢結果排序 ?使用 ORDER BY子句 ? 可以按一個或多個屬性列排序 ? 升序: ASC;降序: DESC;缺省值為升序 ? 當排序列含空值時 ? ASC:排序列為空值的元組最后顯示 ? DESC:排序列為空值的元組最先顯示 An Introduction to Database System 對查詢結果排序(續(xù)) ?[例 24] 查詢選修了 3號課程的學生的學號及其成績,查詢結果按分數(shù)降序排列。 SELECT Sno, Grade FROM SC WHERE Cno= 39。 3 39。 ORDER BY Grade DESC; An Introduction to Database System 查詢結果 Sno Grade 95010 95024 95007 92 95003 82 95010 82 95009 75 95014 61 95002 55 An Introduction to Database System 對查詢結果排序(續(xù)) ?[例 25] 查詢?nèi)w學生情況,查詢結果按所在系的系號升序排列,同一系中的學生按年齡降序排列。 SELECT * FROM Student ORDER BY Sdept, Sage DESC; An Introduction to Database System 四、使用集函數(shù) ?5類主要集函數(shù) ? 計數(shù) ? COUNT( [DISTINCT|ALL] *) ? COUNT( [DISTINCT|ALL] 列名 ) ? 計算總和 ? SUM( [DISTINCT|ALL] 列名 ) ? 計算平均值 ? AVG( [DISTINCT|ALL] 列名 ) An Introduction to Database System 使用集函數(shù)(續(xù)) ? 求最大值 ? MAX( [DISTINCT|ALL] 列名 ) ? 求最小值 ? MIN( [DISTINCT|ALL] 列名 ) ?DISTINCT短語:在計算時要取消指定列中的重復值 ?ALL短語:不取消重復值 ?ALL為缺省值 An Introduction to Database System 使用集函數(shù) (續(xù)) [例 26] 查詢學生總人數(shù) 。 SELECT COUNT(*) FROM Student; [例 27] 查詢選修了課程的學生人數(shù) 。 SELECT COUNT(DISTINCT Sno) FROM SC; 注:用 DISTINCT以避免重復計算學生人數(shù) An Introduction to Database System 使用集函數(shù) (續(xù)) [例 28] 計算 1號課程的學生平均成績 。 SELECT AVG(Grade) FROM SC WHERE Cno= 39。 1 39。; [例 29] 查詢選修 1號課程的學生最高分數(shù) 。 SELECT MAX(Grade) FROM SC WHER Cno= 39。 1 39。; An Introduction to Database System 五、對查詢結果分組 ?使用 GROUP BY子句分組 ?細化集函數(shù)的作用對象 ? 未對查詢結果分組,集函數(shù)將作用于整個查詢結果 ? 對查詢結果分組后,集函數(shù)將分別作用于每個組 An Introduction to Database System 使用 GROUP BY子句分組 ? [例 30] 求各個課程號及相應的選課人數(shù)。 SELECT Cno, COUNT(Sno) FROM SC GROUP BY Cno; ? 結果 Cno COUNT(Sno) 1 22 2 34 3 44 4 33 5 48 An Introduction to Database System 對查詢結果分組 (續(xù)) ? GROUP BY子句的作用對象是查詢的中間結果表 ? 分組方法:按指定的一列或多列值分組 , 值相等的為一組 ? 使用 GROUP BY子句后 , SELECT子句的列名列表中只能出現(xiàn)分組屬性和集函數(shù) An Introduction to Database System 使用 HAVING短語篩選最終輸出結果 ?[例 31] 查詢選修了 3門以上課程的學生學號。 SELECT Sno FROM SC GROUP BY Sno HAVING COUNT(*) 3; An Introduction to Database System 例題 ?[例 32] 查詢有 3門以上課程是 90分以上的學生的學號及( 90分以上的)課程數(shù) SELECT Sno, COUNT(*) FROM SC WHERE Grade=90 GROUP BY Sno HAVING COUNT(*)=3。 An Introduction to Database System 使用 HAVING短語篩選最終輸出結果 ? 只有滿足 HAVING短語指定條件的組才輸出 ? HAVING短語與 WHERE子句的區(qū)別 ——作用對象不同 ? WHERE子句作用于基表或視圖 , 從中選擇滿足條件的元組 。 ? HAVING短語作用于組 , 從中選擇滿足條件的組 。