【正文】
系中所有的元組 An Introduction to Database System 連接查詢(續(xù)) 一、等值與非等值連接查詢 二、自身連接 三、外連接 四、復(fù)合條件連接 An Introduction to Database System 四、復(fù)合條件連接 ?復(fù)合條件連接: WHERE子句中含多個(gè)連接條件 [例 37]查詢選修 2號(hào)課程且成績?cè)?90分以上的所有學(xué)生 SELECT , Sname FROM Student, SC WHERE = AND /* 連接謂詞 */ = ‘2’ AND 90; /* 其他限定條件 */ An Introduction to Database System 復(fù)合條件連接(續(xù)) [例 38]查詢每個(gè)學(xué)生的學(xué)號(hào) 、 姓名 、 選修的課程名及成績 SELECT , Sname, Cname, Grade FROM Student, SC, Course /*多表連接 */ WHERE = and = ; An Introduction to Database System 數(shù)據(jù)查詢 ? 單表查詢 ? 連接查詢 ? 嵌套查詢 ? 集合查詢 ? Select語句的一般形式 An Introduction to Database System 嵌套查詢 (續(xù) ) ?嵌套查詢概述 ? 一個(gè) SELECTFROMWHERE語句稱為一個(gè) 查詢塊 ? 將一個(gè)查詢塊嵌套在另一個(gè)查詢塊的 WHERE子句或 HAVING短語的條件中的查詢稱為 嵌套查詢 An Introduction to Database System 嵌套查詢 (續(xù) ) SELECT Sname /*外層查詢 /父查詢 */ FROM Student WHERE Sno IN ( SELECT Sno /*內(nèi)層查詢 /子查詢 */ FROM SC WHERE Cno= 39。); An Introduction to Database System 嵌套查詢 (續(xù) ) ? 子查詢的限制 ?不能使用 ORDER BY子句 ? 層層嵌套方式反映了 SQL語言的結(jié)構(gòu)化 ? 有些嵌套查詢可以用連接運(yùn)算替代 An Introduction to Database System 嵌套查詢求解方法 ?不相關(guān)子查詢: 子查詢的查詢條件不依賴于父查詢 ? 由里向外 逐層處理。 An Introduction to Database System 嵌套查詢求解方法(續(xù)) ?相關(guān)子查詢:子查詢的查詢條件依賴于父查詢 ? 首先取外層查詢中表的第一個(gè)元組,根據(jù)它與內(nèi)層查詢相關(guān)的屬性值處理內(nèi)層查詢,若 WHERE子句返回值為真,則取此元組放入結(jié)果表 ? 然后再取外層表的下一個(gè)元組 ? 重復(fù)這一過程,直至外層表全部檢查完為止 An Introduction to Database System 嵌套查詢 一、帶有 IN謂詞的子查詢 二、 帶有比較運(yùn)算符的子查詢 三、 帶有 ANY( SOME)或 ALL謂詞的子查詢 四、 帶有 EXISTS謂詞的子查詢 An Introduction to Database System 一、帶有 IN謂詞的子查詢 [例 39] 查詢與“劉晨”在同一個(gè)系學(xué)習(xí)的學(xué)生。 劉晨 39。 SELECT Sno, Sname, Sdept FROM Student WHERE Sdept= 39。; 結(jié)果為: Sno Sname Sdept 202215121 李勇 CS 202215122 劉晨 CS An Introduction to Database System 帶有 IN謂詞的子查詢(續(xù)) 將第一步查詢嵌入到第二步查詢的條件中 SELECT Sno, Sname, Sdept FROM Student WHERE Sdept IN (SELECT Sdept FROM Student WHERE Sname= ? 劉晨 ’ ); 此查詢?yōu)椴幌嚓P(guān)子查詢。劉晨 39。 An Introduction to Database System 帶有 IN謂詞的子查詢(續(xù)) 用連接查詢實(shí)現(xiàn) [例 40] SELECT Sno, Sname FROM Student, SC, Course WHERE = AND = AND =?信息系統(tǒng)’; An Introduction to Database System 嵌套查詢 一、帶有 IN謂詞的子查詢 二、 帶有比較運(yùn)算符的子查詢 三、 帶有 ANY( SOME)或 ALL謂詞的子查詢 四、 帶有 EXISTS謂詞的子查詢 An Introduction to Database System 二、帶有比較運(yùn)算符的子查詢 ? 當(dāng)能確切知道內(nèi)層查詢返回單值時(shí),可用比較運(yùn)算符( , , =, =, =, !=或 )。 SELECT Sno, Cno FROM SC x WHERE Grade =(SELECT AVG(Grade) FROM SC y WHERE =)。 SELECT AVG(Grade) FROM SC y WHERE =39。 2. 執(zhí)行內(nèi)層查詢,得到值 88(近似值),用該值代替內(nèi)層查詢,得到外層查詢: SELECT Sno, Cno FROM SC x WHERE Grade =88; An Introduction to Database System 帶有比較運(yùn)算符的子查詢(續(xù)) 3. 執(zhí)行這個(gè)查詢,得到 ( 202215121, 1) ( 202215121, 3) 1至 3步驟,直到外層的 SC元組全部處理完畢。 CS 39。 。) AND Sdept 39。 An Introduction to Database System 帶有 ANY( SOME)或 ALL謂詞的子查詢 (續(xù)) [例 43] 查詢其他系中比計(jì)算機(jī)科學(xué)系 所有 學(xué)生年齡都小的學(xué)生姓名及年齡。 CS 39。 CS ?。 CS 39。 CS ?。 ?若內(nèi)層查詢結(jié)果非空,則外層的 WHERE子句返回真值 ?若內(nèi)層查詢結(jié)果為空,則外層的 WHERE子句返回假值 ? 由 EXISTS引出的子查詢,其目標(biāo)列表達(dá)式通常都用 * ,因?yàn)閹?EXISTS的子查詢只返回真值或假值,給出列名無實(shí)際意義 ? 2. NOT EXISTS謂詞 ?若內(nèi)層查詢結(jié)果非空,則外層的 WHERE子句返回假值 ?若內(nèi)層查詢結(jié)果為空,則外層的 WHERE子句返回真值 An Introduction to Database System 帶有