【資料庫課程】研討02
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的全部內容。
相關文章
- 資料庫課程設計資料庫
- 資料庫課程作業筆記資料庫筆記
- 《資料庫系統原理》課程筆記資料庫筆記
- Oracle(WDP) OCM資料庫專業課程Oracle資料庫
- 資料庫課程作業筆記 - 編寫資料填充資料庫筆記
- 資料庫課程作業筆記 - 驗收資料庫筆記
- 資料庫學習 哈工大課程 第Ⅸ、Ⅹ講資料庫
- 資料庫課程設計-宿舍管理系統資料庫
- OCP課程24:管理Ⅰ之資料庫安裝資料庫
- 劉鵬教授受邀出席教育部大資料專業教學研討會講授《雲端計算》課程大資料
- 資料庫實戰:SQL Server系列網路課程資料集資料庫SQLServer
- 企業系統運維實戰線上研討會-CSDN公開課-專題視訊課程運維
- 資料庫課程作業筆記 - 編寫資料庫遷移檔案資料庫筆記
- OCP課程60:管理Ⅰ之管理資料庫空間資料庫
- OCP課程61:管理II之複製資料庫資料庫
- OCP課程25:管理Ⅰ之使用DBCA建立資料庫資料庫
- OCP課程26:管理Ⅰ之管理資料庫例項資料庫
- OCP課程50:管理II之診斷資料庫資料庫
- 資料庫課程作業筆記 - 編寫 RESTful 路由資料庫筆記REST路由
- 實驗課程名稱:資料庫系統概論資料庫
- OCP課程23:管理Ⅰ之資料庫體系結構資料庫
- OCP課程53:管理II之使用閃回資料庫資料庫
- 大資料前置課程—Scala大資料
- 國產資料庫調研之——AntDB資料庫資料庫
- 資料庫調研:memcached資料庫
- nodejs + cheerio + Promise(bluebird庫實現)抓取慕課網nodejs課程資料NodeJSPromise
- NoSQL資料庫探討 -- 非關係型資料庫SQL資料庫
- 資料庫課程作業筆記 - 編寫控制器資料庫筆記
- 資料庫課程作業筆記 - 編寫模型檔案資料庫筆記模型
- Python-資料庫-尹成-專題視訊課程Python資料庫
- 軟體工程概論——課程匯入介面以及資料匯入資料庫軟體工程資料庫
- SQLBI_精通DAX課程筆記_02_資料型別SQL筆記資料型別
- Faster資料庫研習,一AST資料庫
- 資料庫恢復原理探討資料庫
- 資料庫課程作業筆記 - 編寫公共 Blade 模板資料庫筆記
- 資料庫課程作業筆記 - 編寫表單驗證資料庫筆記
- 整理了一份oracle資料庫培訓課程大綱Oracle資料庫
- Oracle資料倉儲高階課程Oracle