成果數(shù)據(jù)庫概論divisionscg_第1頁
成果數(shù)據(jù)庫概論divisionscg_第2頁
成果數(shù)據(jù)庫概論divisionscg_第3頁
成果數(shù)據(jù)庫概論divisionscg_第4頁
成果數(shù)據(jù)庫概論divisionscg_第5頁
已閱讀5頁,還剩9頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、Examples of SQL(division) (C)-南京大學計算機科學與技術(shù)系2關(guān)系模式學生 S (sno, sn, sd, sa)課程 C (cno, cn, pno)選課SC (sno, cno, g) (C)-南京大學計算機科學與技術(shù)系3關(guān)系代數(shù)中的除法運算如果學生t(或?qū)W生表S中的一個元組t)是一個滿足結(jié)果要求的學生,那么:對選課表SC中的任意一條“學生s4的選課元組x”,學生s都應(yīng)該選修過其中的課程( o),即:都可以在選課表SC中找到一條能夠滿足以下條件的選課元組y: y.sno=t.sno and o= o例:查詢至少修讀學號為S4的學生所修讀的所有課程的學生的學號在SQ

2、L中并沒有提供除法運算符,該查詢的語義如下: (C)-南京大學計算機科學與技術(shù)系4我們也可以用另外一種方式來理解該查詢要求:如果學生t是一個滿足查詢要求的學生,那么在選課表SC中,不存在“S4選修過某一門課程,而學生t沒有選修過這門課”。即:在選課表SC中找不到符合以下要求的選課元組x是學生S4的選課元組(即 x.sno=S4)但 學生t 沒有選修過這門課( o)即:在選課表SC中找不到“學生t和課程 o”之間的選課記錄也就是找不到能夠滿足以下要求的選課元組y: y.sno=t.sno and o= o例:查詢至少修讀學號為S4的學生所修讀的所有課程的學生的學號 (C)-南京大學計算機科學與技

3、術(shù)系5因此,該查詢的查詢條件可以被理解為:在選課表SC中找不到符合以下要求的選課元組x是學生S4的選課元組(即 x.sno=S4)但 學生 t 沒有選修過這門課( o)例:查詢至少修讀學號為S4的學生所修讀的所有課程的學生的學號 (C)-南京大學計算機科學與技術(shù)系6首先,我們可以構(gòu)造出第一個子查詢 q1:查詢 “學生t和課程 o之間的選課元組”q1: select *from SC ywhere y.sno = t.sno and o = o在選課表SC中找不到符合以下要求的選課元組x是學生S4的選課元組(即 x.sno=S4)但 學生t 沒有選修過這門課( o) (C)-南京大學計算機科學與

4、技術(shù)系7其次,利用子查詢q1可以構(gòu)造出第二個子查詢q2:查詢學生S4的選課元組x但 學生t沒有選修過其中的課程 oq2: select *from SC xwhere x.sno=S4 and NOT EXISTS ( q1 )在選課表SC中找不到符合以下要求的選課元組x是學生S4的選課元組(即 x.sno=S4)但 學生t 沒有選修過這門課( o) q1:查詢 “學生t和課程 o之間的選課元組” (C)-南京大學計算機科學與技術(shù)系8最后,利用子查詢q2來構(gòu)造最終的查詢命令,即:查詢能夠使子查詢q2的執(zhí)行結(jié)果為空的學生t的學號select t.snofrom S twhere NOT EXIS

5、TS ( q2 )q2:查詢 學生S4的選課元組x 但 學生t沒有選修過其中的課程 o在選課表SC中找不到符合以下要求的選課元組x是學生S4的選課元組(即 x.sno=S4)但 學生t 沒有選修過這門課( o) q1:查詢 “學生t和課程 o之間的選課元組” (C)-南京大學計算機科學與技術(shù)系9將子查詢q1和q2代入后得到如下的查詢命令:SELECT t.snoFROM S tWHERE NOT EXISTS (SELECT *FROM SC xWHERE x.sno=S4 and NOT EXISTS (SELECT *FROM SC yWHERE y.sno=t.sno and o ) )

6、例:查詢至少修讀學號為S4的學生所修讀的所有課程的學生的學號 (C)-南京大學計算機科學與技術(shù)系10另一種解題思路(第二種思路)該查詢的語義如下:如果學生 t 是一個滿足查詢要求的學生,那么:假設(shè)M是學生 t 選修過的所有課程的集合,則學生S4選修過的每一門課都應(yīng)該屬于集合M或者說:不存在 “學生S4選修過但又不屬于集合M” 的課程按照上述思路,最終的查詢命令如下(next slide)例:查詢至少修讀學號為S4的學生所修讀的所有課程的學生的學號 (C)-南京大學計算機科學與技術(shù)系11SELECT t.snoFROM S tWHERE NOT EXISTS (SELECT *FROM SC x

7、WHERE x.sno=S4 and o NOT IN (SELECT oFROM SC yWHERE y.sno=t.sno ) )學生t選修過的課程集合例:查詢至少修讀學號為S4的學生所修讀的所有課程的學生的學號 (C)-南京大學計算機科學與技術(shù)系12SELECT t.snoFROM S tWHERE NOT EXISTS (SELECT *FROM SC xWHERE x.sno=S4 and o NOT IN (SELECT oFROM SC yWHERE y.sno=t.sno ) )例:查詢至少修讀學號為S4的學生所修讀的所有課程的學生的學號學生S4 選修過但學生t沒有選修過 (C)-南京大學計算機科學與技術(shù)系13SELECT t.snoFROM S tWHERE NOT EXISTS (SELECT *FROM SC xWHERE x.sno=S4 and o NOT IN (SELECT oFROM SC yWHERE y.sno=t.sno ) )例:查詢至少修讀學號為S4的學生所修讀的所有課程的學生的學號不存在“學生S4 選修過但學生t沒有

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論