資料庫程式設計 – PHP+MySQL 第 八章 合併查詢程式  上一頁     

 

8-5 自我挑戰

內容:

  • 8-5-1 自我挑戰:查詢各班名冊

  • 5-5-2 自我挑戰:查詢班級開課

8-5-1 自我挑戰:查詢各班名冊

(A) 系統功能:PM7_1

學務處需要一個可以查詢各班名冊的網頁,期望查詢網頁如下:

執行結果網頁如下:

 (B) 系統分析

在第六章 Ex6_4 利用巢狀查詢做過同樣的需求,先利用班級名稱(class_name) classes 表查詢出相對應的 class_ID,再利用 = 連結,由 students 表內查詢出該學生的名冊。

如果用合併查詢方法,則將 students classes Join 乘積運算,得到所有可能的組合後,再篩選 classes.class_name= 所欲查詢的班級,又 students.class_ID = classes.class_ID 兩條件。下圖是 students × classes 所得到每一筆記錄的組合,在這些組合中,我們篩選 class_name = 所欲查詢的班級名稱,則它相對應的 class_ID students.class_ID 是相同的話,則表示該學生是屬於這一班。滿足這兩條件的記錄,我們只要擷取 students 各欄位資料即可。

 (C) 執行網頁的提示:PM7_1-action.php

1

2

3

4

5

6

…..

       $sql_query = "select student_ID, name, sex, tel, mailbox, address

                      from students as A, classes as B

                      where A.class_ID = B.class_ID

                      And B.class_name = '$class_name'";

…..

8-5-2 自我挑戰:查詢班級開課

(A) 系統功能:PM7_2

學務處需要一個用班級名稱,可以查詢到該班級學期所開的課,期望表單網頁如下:

執行網頁如下:

 (B) SQL 系統分析

此網頁功能與 Ex7_3 非常相似,如果用巢狀技巧的話,先由 classes 表找到該班的 class_ID,再利用它由 open_course 表查詢到該班這學期開了哪些課(不只一門,所以用 in 連結),再利用 course_ID all_course 查詢出該課程的詳細資料。

如果用合併查詢的話,查詢網頁會開啟 classes 表,請它傳遞所選班級的 class_ID,執行網頁就僅合併 open_course all_course 兩張資料表即可,篩選條件為 A.class_ID = $class_ID A.course_ID = B.course_ID 即可。

『執行網頁』的  SQL 程式如下:

Select B.course_ID, B.course_name, B.required, B.credit

From open_course as A, all_course as B

Where (A.class_ID = '$class_ID')

And (C.course_ID = B.course_ID)

主講人:粘添壽博士

course_db 關聯圖

 

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