資料庫程式設計 – PHP+MySQL 第 九章 混合查詢程式  上一頁      下一頁

 

9-3 自我挑戰 混合查詢

內容:

  • 9-3-1 自我挑戰:列印班級名冊

  • 9-3-2 自我挑戰:查詢學生各科成績

  • 9-3-3 自我挑戰:查詢教師開課及班級

9-3-1 自我挑戰:列印班級名冊

(A) 系統需求:PM8_1

請在 course_db 資料庫上製作一只可以列印各班級名冊的網頁,如下:

n   『表單網頁』:下拉式選擇班級名稱。

n   『執行網頁』:輸出該班級名冊,依學號、姓名、性別、郵件地址、地址順序印出。

(B) SQL 系統分析提示

當然利用巢狀、合併查詢技巧都可以達到目的,但我們還是希望用混合技巧來作看看。如下圖所示,我們先利用班級名稱(進四資管二丙) classes 資料表查詢到它的 classes_ID,再利用它與 students 資料表合併,如下圖。

我們直接用 SQL 命令操作如下:

Select A.*

From students as A, (Select class_ID

                  From classes

                  Where class_name = "$class_ID") as B

Where A.class_ID = B.class_ID;

 9-3-2 自我挑戰:查詢學生各科成績

(A) 系統需求:PM8_2

請在 course_db 資料庫製作一支可供學生查詢這學期各科學期成績的網頁,如下:

n   『表單網頁』:可供輸入學生學號。

n   『執行網頁』:輸出該學生這學期修讀科目與分數,依課程代碼、課程名稱、必選修、學分數與成績之順序印出。

(B) SQL 系統分析

我們將本題目有關的系統關聯圖畫出來,如下圖。執行網頁收到查詢學號 (student_ID) 後,由 select_course 查詢出該生修了哪些課程及分數 {open_course_ID, final} (as A),再與 open_course 資料表合併查詢出開課編碼(open_course_ID) 與課程代碼的對應關係,產生了 {course_ID, final} (as C),它再與 all_course 資料表合併,查詢出所修課程的詳細資料。

值得注意的是,學生並非只修一門課,因此,此題目要用巢狀技巧非常困難,如果使用合併技巧,因它需要合併 4 張資料表,所產生的暫存表一定非常大,也可以發現用混合技巧,不但很容易,負荷也減少許多。我們直接用 SQL 命令操作如下:

select D.course_ID, D.course_name, D.required, D.credit, C.final

From all_course as D, (select B.course_ID, A.final

                  from open_course as B, (select open_course_ID, final

                                      from select_course

                                      where student_ID = "$student_ID") as A

                where B.open_course_ID = A.open_course_ID) as C

where D.course_ID = C.course_ID;

9-3-3 自我挑戰:查詢教師開課及班級

(A) 系統需求:PM8_3

請在 course_db 資料庫製作一支可供查詢教師這學期開了那些課程及班級名稱,如下:

n   『表單網頁』:可供下拉式選擇教師姓名。

n   『執行網頁』:輸出該教師這學期開課資料,依班級名稱、課程名稱、必選修與學分數之順序印出。

(B) SQL 系統分析

我們利用 course_db 關聯圖找出相關訊息如下圖。

SQL 程式提示如下:

Select C.class_name, D.course_name, D.required, D.credit

From (select A.course_ID, B.class_name

From (Select course_ID, class_ID

From open_course

Where teacher_ID =’$teacher_ID’) as A, classes as B

Where A.class_ID = B.class_ID) as C, all_course as D

Where C.course_ID = D.course_ID;

 

主講人:粘添壽博士

course_db 關聯圖

 

資料庫程式設計 - PHP+MySQL: