6-4 多表格合併查詢
許多查詢條件必須兩個以上表格合併而成,牽涉到問題就比較複雜,我們用幾個實例來介紹。 6-4-1 範例研討:查詢教師開課課程 (A) 程式功能:Ex6_6 請查詢『粘添壽』老師這學期開了那些課程,請依照班級名稱、課程名稱、必選修、學分數支順序印出。 (B) 系統分析: 這題目看起來稀鬆平常,但做出來可不簡單。全校所開的課程都登錄於『open_course』表內,但它僅記錄教師代碼(teacher_ID),因此我們必須由『teachers』表得知粘添壽老師的代碼多少。另外,它也僅登錄課程代碼(course_ID),我們還需結合『all_course』才知道所開課程的名稱與相關資料。 還有班級資料登錄於 classes 表格內,由此可見,此問題牽涉到 4 個表格,但合併表格時,我們只要擷取有用到的欄位就好,這樣產生的虛擬表格就不會太大。
(C) 程式範例:
6-4-2 範例研討:同上題 - 巢狀查詢 (A) 程式功能:Ex6_7 請查詢『粘添壽』老師這學期開了那些課程,請依照班級名稱、課程名稱、必選修、學分數支順序印出。 (B) 系統分析:(同上題分析)
(C) 程式範例: l 步驟 1:先由 teachers 與 open_course 兩表格中查詢出,粘添壽老師開了那些課程,以及其班級,如下:
l 步驟 2:我們得到了粘添壽老師開課的班級代碼與課程代碼後,利用課程代碼由 all_course 表查詢出該課程的相關資料,如下:
得到結果如下:
上述結果並沒有得到該門課開在哪一個班級的班級代碼(class_ID),吾人需要再增加得到班級代碼的查詢語句。 l 步驟 3 (很難達成):接下來,我們必須在最後輸出語句中增加班級代碼,語法如下:
上述語法無法執行,原因是兩個子查詢都可能是一個以上的結果,因此無法匹配。由此可見,該題很難由巢狀查詢方法得到結果,利用合併查詢較容易。 6-4-3 自我挑戰:查詢學生選課資料 (A) 程式功能:PM6_3 查詢學號 = 『90211306』同學,這學期修了那些課程,請依照開課班級名稱、課程名稱、學分數、必選修之順序印出,查詢結果如下:
(B) 系統分析: 全校學生選課情況都登錄於 select_course 表格內。吾人可利用學生學號由此表格中查詢出他修讀哪門課的 open_course_ID,再利用 open_course_ID 由 open_course 表中查詢出課程代碼(course_ID) 、班級代碼(class_ID) 與 開課教師的代碼( teacher_ID),再分別由 all_course 與 classes表格中查詢他們的名稱,如下圖所示。
6-4-4 自我挑戰:查詢開課班級與教師 (A) 程式功能:PM6_4 請查詢這學期是否有開『資料庫管理系統』課程,請列印出課程代碼、開課班級及開課教師資料。查詢結果如下:
(B) 系統分析: 首先須由 all_course 表中查詢出『資料庫管理系統』的課程代碼(course_ID),再利用它由 open_course 表中查詢出該課程開在哪一班(class_ID)與哪位老師(teacher_ID) 開的,再由 teachers 與 classes 表中查詢出它的名稱,如下圖所示。
|
翻轉工作室:粘添壽
資料庫系統概論(含邏輯設計)
翻轉電子書系列:
|