【資料庫課程】研討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的全部內容。
相關文章
- 資料庫課程作業筆記資料庫筆記
- SQLBI_精通DAX課程筆記_02_資料型別SQL筆記資料型別
- 《資料庫系統原理》課程筆記資料庫筆記
- 資料庫課程作業筆記 - 編寫資料填充資料庫筆記
- 資料庫學習 哈工大課程 第Ⅸ、Ⅹ講資料庫
- 資料庫課程作業筆記 - 驗收資料庫筆記
- 資料庫課程作業筆記 - 編寫資料庫遷移檔案資料庫筆記
- 實驗課程名稱:資料庫系統概論資料庫
- 資料庫課程作業筆記 - 編寫 RESTful 路由資料庫筆記REST路由
- 02、MySQL—資料庫基本操作MySql資料庫
- mysql重點題目--查詢“01“課程比“02“課程成績高的學生的資訊及課程分數MySql
- 資料庫課程作業筆記 - 編寫控制器資料庫筆記
- 資料庫課程作業筆記 - 編寫公共 Blade 模板資料庫筆記
- 資料庫課程作業筆記 - 編寫模型檔案資料庫筆記模型
- 國產資料庫調研之——AntDB資料庫資料庫
- 資料庫課程作業筆記 - 編寫表單驗證資料庫筆記
- Faster資料庫研習,一AST資料庫
- 【資料庫】資料庫儲存過程(一)資料庫儲存過程
- 資料庫系統架構討論資料庫架構
- 慕課網大資料開發工程師課程大資料工程師
- Task01&Task02:課程簡介、Installation、Getting Start
- 資料庫課程設計—超市零售資訊管理系統(Python實現)資料庫Python
- 【python資料探勘課程】二十三.時間序列金融資料預測及Pandas庫詳解Python
- 資料庫恢復過程資料庫
- 資料庫儲存過程資料庫儲存過程
- 11月11日線上研討會預熱 | ODX診斷資料庫轉換工具 — VDC(ODX)資料庫
- 時序資料庫破局開放探討資料庫
- Oracle資料庫升級或資料遷移的方法探討Oracle資料庫
- 資料庫租戶能力大調研資料庫
- 資料庫學習 哈工大課程 第一講 基本概念及關係資料庫
- “種草”10門網課,最佳資料科學線上課程!資料科學
- 大資料公開課系列課程第二季-趙強老師-專題視訊課程大資料
- 巨杉資料庫亮相第五屆中國網際網路金融發展戰略研討會資料庫
- 基於MySQL資料庫討論虛擬機器資料恢復MySql資料庫虛擬機資料恢復
- 資料庫的連線過程資料庫
- MySql資料庫——儲存過程MySql資料庫儲存過程
- 資料分析02
- MySQL資料庫學習筆記02(事務控制,資料查詢)MySql資料庫筆記
- 分散式資料庫索引能力大調研分散式資料庫索引