【正文】
EXISTS謂詞的子查詢 (續(xù)) [例 44]查詢所有選修了 1號課程的學(xué)生姓名。139。 1 39。139。 SELECT Sname FROM Student WHERE NOT EXISTS (SELECT * FROM SC WHERE Sno = AND Cno=39。); An Introduction to Database System 帶有 EXISTS謂詞的子查詢 (續(xù)) ? 不同形式的查詢間的替換 ? 一些帶 EXISTS或 NOT EXISTS謂詞的子查詢不能被其他形式的子查詢等價替換 ? 所有帶 IN謂詞、比較運算符、 ANY和 ALL謂詞的子查詢都能用帶EXISTS謂詞的子查詢等價替換 ? 用 EXISTS/NOT EXISTS實現(xiàn)全稱量詞 (難點 ) SQL語言中沒有全稱量詞 ? ( For all) 可以把帶有全稱量詞的謂詞轉(zhuǎn)換為等價的帶有存在量詞的謂詞: (?x)P ≡ ? (? x(? P)) An Introduction to Database System 帶有 EXISTS謂詞的子查詢 (續(xù)) 例: [例 39]查詢與“劉晨”在同一個系學(xué)習(xí)的學(xué)生。 SELECT Sname FROM Student WHERE NOT EXISTS ( SELECT * FROM Course WHERE NOT EXISTS (SELECT * FROM SC WHERE Sno= AND Cno= ) ) ; An Introduction to Database System 帶有 EXISTS謂詞的子查詢 (續(xù)) 用 EXISTS/NOT EXISTS實現(xiàn)邏輯蘊函 (難點 ) ? SQL語言中沒有蘊函 (Implication)邏輯運算 ? 可以利用謂詞演算將邏輯蘊函謂詞等價轉(zhuǎn)換為: p ? q ≡ ? p∨ q An Introduction to Database System 帶有 EXISTS謂詞的子查詢 (續(xù)) [例 47]查詢至少選修了學(xué)生 202215122選修的全部課程的學(xué)生號碼。 ? 形式化表示: 用 P表示謂詞 “學(xué)生 202215122選修了課程 y” 用 q表示謂詞 “學(xué)生 x選修了課程 y” 則上述查詢?yōu)?: (?y) p ? q An Introduction to Database System 帶有 EXISTS謂詞的子查詢 (續(xù)) ? 等價變換: (?y)p ? q ≡ ? (?y (?(p ? q )) ≡ ? (?y (?(? p∨ q) )) ≡ ? ?y(p∧ ?q) ? 變換后語義:不存在這樣的課程 y,學(xué)生 202215122選修了y,而學(xué)生 x沒有選。 202215122 39。 方法一: SELECT * FROM Student WHERE Sdept= 39。 UNION SELECT * FROM Student WHERE Sage=19; ? UNION:將多個查詢結(jié)果合并起來時,系統(tǒng)自動去掉重復(fù)元組。CS39。 SELECT Sno FROM SC WHERE Cno=39。 UNION SELECT Sno FROM SC WHERE Cno= 39。; An Introduction to Database System 集合查詢(續(xù)) [例 50] 查詢計算機科學(xué)系的學(xué)生與年齡不大于 19歲的學(xué)生的交集 SELECT * FROM Student WHERE Sdept=39。 INTERSECT SELECT * FROM Student WHERE Sage=19 An Introduction to Database System 集合查詢(續(xù)) ?[例 50] 實際上就是查詢計算機科學(xué)系中年齡不大于 19歲的學(xué)生 SELECT * FROM Student WHERE Sdept= 39。 AND Sage=19; An Introduction to Database System 集合查詢(續(xù)) [例 51] 查詢選修課程 1的學(xué)生集合與選修課程 2的學(xué)生集合的交集 SELECT Sno FROM SC WHERE Cno=39。 INTERSECT SELECT Sno FROM SC WHERE Cno=39。; An Introduction to Database System 集合查詢(續(xù)) [例 51]實際上是查詢既選修了課程 1又選修了課程 2 的學(xué)生 SELECT Sno FROM SC WHERE Cno=39。 AND Sno IN (SELECT Sno FROM SC WHERE Cno=39。); An Introduction to Database System 集合查詢(續(xù)) [例 52] 查詢計算機科學(xué)系的學(xué)生與年齡不大于 19歲的學(xué)生的差集。CS39。 An Introduction to Database System 集合查詢(續(xù)) [例 52]實際上是查詢計算機科學(xué)系中年齡大于 19歲的學(xué)生 SELECT * FROM Student WHERE Sdept= 39。 AND Sage19; An Introduction to Database System 數(shù)據(jù)查詢 ? 單表查詢 ? 連接查詢 ? 嵌套查詢 ? 集合查詢 ? Select語句的一般形式 An Introduction to Database System SELECT語句的一般格式 SELECT [ALL|DISTINCT] 目標(biāo)列表達(dá)式 [別名 ] [ , 目標(biāo)列表達(dá)式 [別名 ]] … FROM 表名或視圖名 [別名 ] [ , 表名或視圖名 [別名 ]] … [WHERE 條件表達(dá)式 ] [GROUP BY 列名 1 [HAVING 條件表達(dá)式 ]] [ORDER BY 列名 2 [ASC|DESC] An Introduction to Database System 下課了。