【資料庫課程】研討02

清少納言_發表於2017-12-20

1. 用四種方法表達查詢:檢索馬小紅老師所授課程的學期,課程號,上課時間。

所需要使用的教師表:
教師表
開課表:

這裡寫圖片描述

要進行如題的查詢,明顯需要進行多表查詢,涉及到的表就是上述兩張。先用聯結查詢的方式來實現:

select O.xq,O.kh,O.sksj from O,T
where T.xm='馬小紅' and T.gh=O.gh;

這是最常用的聯結查詢,執行時,要對錶O和T做聯結操作,在from子句後面寫上執行聯結操作的表名O和T,再在where子句中寫上聯結的條件T.gh=O.gh。要檢索的老師姓名為馬小紅,所以附上T.xm=’馬小紅’即可完成。

第二種和第三種寫法都是依靠巢狀查詢實現的,第二種寫法如下:

select xq,kh,sksj from O
where gh in(select gh from T where xm='馬小紅');

在巢狀查詢中,最常用的謂詞是in,並且巢狀的子查詢在外層查詢處理之前求解。該查詢方式為非相關子查詢,子查詢只需要執行一次,子查詢結果不再變化,供主查詢使用。所以在該查詢語句中,select gh from T where xm='馬小紅'被優先執行,得到需要查詢人物的工號後,再次在O表中進行查詢,得到結果。

第三種寫法如下:

select xq,kh,sksj from O where '馬小紅' in
(select xm from T where O.gh=T.gh);

該語句中的內層查詢稱為相關子查詢,也就是說每查詢一條記錄,需要重新做一次子查詢。處理過程如下:首先取外層查詢中O的第一個元組(即表中每一行的資料),根據它的值和內層查詢相關的屬性值(即為gh)處理內層查詢,若where子句返回值為真(即內層查詢結果非空,也就是說內層有滿足條件的元組,這裡直觀上看就是T中存在xm為’馬小紅’的元組,通過聯結的方式得到其工號),則取此元組放入結果表(最後要輸出的內容)中;然後接著檢查外層查詢中O的第二個元組,重複這一過程,知道O表全部檢查完畢為止。

第四種寫法,使用存在量詞的巢狀查詢:

select xq,kh,sksj from O
where  exists(select * from T where xm='馬小紅' and O.gh=T.gh );

這裡的exists即為存在量詞,若內層查詢結果非空,則外層查詢的where後面的條件為真。在本例中,對於O中的每一個元組,只要其教師為‘馬小紅’,則表示該元組是滿足條件的元組,放入結果表中。

最後附上輸出的結果:
這裡寫圖片描述

2. 檢索有學生重修的教師編號和姓名。

所需要的表 學生表S如下:
這裡寫圖片描述

選課表E如下:
這裡寫圖片描述

首先需要理解題目的含義,需要輸出的有學生重修的教師編號和姓名,第一,學生重修怎麼表示?很簡單,就是同一個學生,選了不同學期的同一門課,那就表示,該學生重修了。那麼輸出哪一次課的教師編號和工號呢?根據題意,有學生重修,也就意味著要輸出該生最後一次上這門重修課的時候的任課教師編號。那麼題目就理解清楚了,程式碼如下:

select X.gh,T.xm from S,T,E as X,E as Y 
where X.gh=T.gh and S.xh=X.xh and X.xh=Y.xh and X.kh=Y.kh and Y.xq<X.xq;

這裡的查詢用到了三張表,分別是學生表,教師表(在題1中)和選課表。由於需要對選課表E進行重複查詢,所以引入2個元組變數X和Y,在語句中應用元素變數對列名進行限定。我們來看where子句中的條件,首先是X表(也就是E表)和T的聯結操作,用來輸出的,沒什麼好解釋;接著是S.xh=X.xh,這是聯結操作,也不用解釋;然後是 X.xh=Y.xh,作用是限定同一名學生,因為要重修,肯定是同一名同學所為;X.kh=Y.kh也就是意味著選了同一門課,也就是重修;最後 Y.xq<X.xq也就是需要選擇該生最後一次上這門課的學期,用於找到這門課的任課教師。
最後的結果表也很簡單:
這裡寫圖片描述

3. 如果O表加一個個開課編號(標識碼)會帶來哪些影響(優缺點)?

表如下:
這裡寫圖片描述

表中可以看出,課號和教師的工號是表的外來鍵,加一個開課編號的含義是,新增一個唯一的編號,成為該表的主鍵,來指向這些在不同學期開設的不同課程。

優點: 在新增開課編號後,開課編號即為該表的主鍵,那麼在選課表中的排序會更加容易。
選課表中的學期,課號和教師工號均可以用O中的開課編號唯一表示,可以大大節省資料的儲存空間。

缺點:
這樣一來,選課表中學生選課的學期,課號和教師工號都被開課編號代替,那麼在搜尋這些資訊的時候,需要關聯選課表和開課表兩張表,使得搜尋過程變得複雜。

以上是研討2的全部內容。

相關文章