【正文】
[例 18] 查詢所有不姓劉的學(xué)生姓名。 SELECT Sname, Sno, Ssex FROM Student WHERE Sname NOT LIKE 39。劉 %39。; An Introduction to Database System 字符匹配(續(xù)) 3) 使用換碼字符將通配符轉(zhuǎn)義為普通字符 [例 19] 查詢 DB_Design課程的課程號(hào)和學(xué)分。 SELECT Cno, Ccredit FROM Course WHERE Cname LIKE 39。DB\_Design39。 ESCAPE 39。\?; [例 20] 查詢以 DB_開頭,且倒數(shù)第 3個(gè)字符為 i的課程的詳細(xì)情況。 SELECT * FROM Course WHERE Cname LIKE 39。DB\_%i_ _39。 ESCAPE 39。 \ ?; ESCAPE 39。\ 39。 表示“ \” 為換碼字符 An Introduction to Database System (5) 涉及空值的查詢 ? 謂詞: IS NULL 或 IS NOT NULL ? “IS” 不能用 “ =” 代替 [例 21] 某些學(xué)生選修課程后沒有參加考試,所以有選課記錄,但沒 有考試成績(jī)。查詢?nèi)鄙俪煽?jī)的學(xué)生的學(xué)號(hào)和相應(yīng)的課程號(hào)。 SELECT Sno, Cno FROM SC WHERE Grade IS NULL [例 22] 查所有有成績(jī)的學(xué)生學(xué)號(hào)和課程號(hào)。 SELECT Sno, Cno FROM SC WHERE Grade IS NOT NULL; An Introduction to Database System (6) 多重條件查詢 ?邏輯運(yùn)算符: AND和 OR來聯(lián)結(jié)多個(gè)查詢條件 ? AND的優(yōu)先級(jí)高于 OR ? 可以用括號(hào)改變優(yōu)先級(jí) ?可用來實(shí)現(xiàn)多種其他謂詞 ? [NOT] IN ? [NOT] BETWEEN … AND … An Introduction to Database System 多重條件查詢(續(xù)) [例 23] 查詢計(jì)算機(jī)系年齡在 20歲以下的學(xué)生姓名。 SELECT Sname FROM Student WHERE Sdept= 39。CS39。 AND Sage20; An Introduction to Database System 多重條件查詢(續(xù)) ?改寫 [例 12] [例 12] 查詢信息系( IS)、數(shù)學(xué)系( MA)和計(jì)算機(jī)科學(xué)系( CS)學(xué)生的姓名和性別。 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 單表查詢 ?查詢僅涉及一個(gè)表: ?一 、 選擇表中的若干列 ?二 、 選擇表中的若干元組 ?三 、 ORDER BY子句 ?四 、 聚集函數(shù) ?五 、 GROUP BY子句 An Introduction to Database System 三、 ORDER BY子句 ? ORDER BY子句 ?可以按一個(gè)或多個(gè)屬性列排序 ?升序: ASC;降序: DESC;缺省值為升序 ?當(dāng)排序列含空值時(shí) ?ASC:排序列為空值的元組最后顯示 ?DESC:排序列為空值的元組最先顯示 An Introduction to Database System ORDER BY子句 (續(xù)) [例 24] 查詢選修了 3號(hào)課程的學(xué)生的學(xué)號(hào)及其成績(jī) , 查詢結(jié)果按分?jǐn)?shù)降序排列 。 SELECT Sno, Grade FROM SC WHERE Cno= 39。 3 39。 ORDER BY Grade DESC; [例 25] 查詢?nèi)w學(xué)生情況,查詢結(jié)果按所在系的系號(hào)升序排列,同一系中的學(xué)生按年齡降序排列。 SELECT * FROM Student ORDER BY Sdept, Sage DESC; An Introduction to Database System 單表查詢 ?查詢僅涉及一個(gè)表: ?一 、 選擇表中的若干列 ?二 、 選擇表中的若干元組 ?三 、 ORDER BY子句 ?四 、 聚集函數(shù) ?五 、 GROUP BY子句 An Introduction to Database System 四、聚集函數(shù) ?聚集函數(shù): ? 計(jì)數(shù) COUNT( [DISTINCT|ALL] *) COUNT( [DISTINCT|ALL] 列名 ) ? 計(jì)算總和 SUM( [DISTINCT|ALL] 列名 ) ? 計(jì)算平均值 AVG( [DISTINCT|ALL] 列名 ) ? 最大最小值 MAX( [DISTINCT|ALL] 列名 ) MIN( [DISTINCT|ALL] 列名 ) An Introduction to Database System 聚集函數(shù) (續(xù)) [例 26] 查詢學(xué)生總?cè)藬?shù) 。 SELECT COUNT(*) FROM Student; [例 27] 查詢選修了課程的學(xué)生人數(shù) 。 SELECT COUNT(DISTINCT Sno) FROM SC; [例 28] 計(jì)算 1號(hào)課程的學(xué)生平均成績(jī) 。 SELECT AVG(Grade) FROM SC WHERE Cno= 39。 1 39。; An Introduction to Database System 聚集函數(shù) (續(xù)) [例 29] 查詢選修 1號(hào)課程的學(xué)生最高分?jǐn)?shù) 。 SELECT MAX(Grade) FROM SC WHER Cno= ‘ 1 ’; [例 30]查詢學(xué)生 202115012選修課程的總學(xué)分?jǐn)?shù)。 SELECT SUM(Ccredit) FROM SC, Course WHER Sno=39。20211501239。 AND =。 An Introduction to Database System 單表查詢 ?查詢僅涉及一個(gè)表: ?一 、 選擇表中的若干列 ?二 、 選擇表中的若干元組 ?三 、 ORDER BY子句 ?四 、 聚集函數(shù) ?五 、 GROUP BY子句 An Introduction to Database System 五、 GROUP BY子句 ? GROUP BY子句分組: 細(xì)化聚集函數(shù)的作用對(duì)象 ? 未對(duì)查詢結(jié)果分組 , 聚集函數(shù)將作用于整個(gè)查詢結(jié)果 ? 對(duì)查詢結(jié)果分組后,聚集函數(shù)將分別作用于每個(gè)組 ? 作用對(duì)象是查詢的中間結(jié)果表 ? 按指定的一列或多列值分組,值相等的為一組 An Introduction to Database System GROUP BY子句(續(xù)) [例 31] 求各個(gè)課程號(hào)及相應(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 An Introduction to Database System GROUP BY子句(續(xù)) [例 32] 查詢選修了 3門以上課程的學(xué)生學(xué)號(hào) 。 SELECT Sno FROM SC GROUP BY Sno HAVING COUNT(*) 3; An Introduction to Database System GROUP BY子句(續(xù)) ?HAVING短語與 WHERE子句的區(qū)別: ? 作用對(duì)象不同 ? WHERE子句作用于基表或視圖 , 從中選擇滿足條件的元組 ? HAVING短語作用于組 , 從中選擇滿足條件的組 。 An Introduction to Database System 下課了。 休息一會(huì)兒。