免費開始練習
高考申論題 106年 [資訊處理] 資料庫應用

第 四 題

📖 題組:
一個大學課程關聯資料庫包含下列關係:(每小題 5 分,共 20 分) STUDENT(S#, Sname, Saddress, D#), TEACHER(T#, Tname, Taddress, D#), COURSE(C#, Cname, CreditHour), TAKE_COURSE(S#, C#, Score), OFFER(T#, C#, Classroom) 寫出下列查詢的 SQL 描述: (一) 找出學生姓名與其曾經修過某位老師剛好兩門課的老師姓名 (二) 找出從來沒有被當過(所有課程 Score ≧ 60)的學生姓名 (三) 找出修過名稱為‘John’開設所有課程並且都被當掉的學生 (四) 列出所有學生的姓名與總學分數(CreditHour)與修過課程的平均分數
📝 此題為申論題,共 4 小題

小題 (四)

列出所有學生的姓名與總學分數(CreditHour)與修過課程的平均分數

思路引導 VIP

看到題目要求「所有學生」與各種統計數值(總計、平均),應直覺聯想到需使用 LEFT JOIN 保留所有學生紀錄,並搭配 GROUP BY 分組。最後利用聚合函數 SUM() 與 AVG() 計算學分數與分數。

🤖
AI 詳解
AI 專屬家教

【解題思路】利用 LEFT JOIN 確保涵蓋所有學生,並使用 GROUP BY 搭配聚合函數 SUM() 與 AVG() 進行計算。 【詳解】 已知:需查詢「所有學生」,因此應以 STUDENT 資料表為主體使用 LEFT JOIN,避免漏掉未修課的學生。

小題 (一)

試以最適當且最少個關聯資料表(relation),來描述上述之實體關聯圖。需寫出該些關聯資料表的名稱、所含之屬性及主要鍵。(10 分)

思路引導 VIP

看到此題,應立即運用「ER 模型轉換為關聯綱目」的標準規則。先將強實體獨立建表;接著處理 M:N 關聯,必須獨立建表並納入兩端主鍵與關聯屬性;最後處理弱實體與 1:N 識別關聯,弱實體不需獨立的關聯表,而是直接將擁有者(Owner)的主鍵作為外鍵納入,並與自身的部分鍵組成複合主鍵。

🤖
AI 詳解
AI 專屬家教

【解題思路】運用 ER 模型轉換關聯綱目的標準規則,判斷實體強弱及關聯基數(1:N 或 M:N)以決定表格的整併或獨立建立。 【詳解】 一、強實體轉換:

小題 (二)

對於上述之關聯資料表(relation),於撰寫程式時,那些屬性之間應設定為參考完整性限制(Referential integrity constraint),那些外來鍵屬性(foreign key)必須設為不可為空值(Non-Null)。(10 分)

思路引導 VIP

遇到 ERD 轉關聯綱目題目,首先將實體與關聯轉換為標準關聯表(Relation)。多對多關聯(Assignment)與弱實體關聯(Dependent)皆會產生外來鍵,接著依據實體完整性(主鍵不可為空)與依賴關係來判斷哪些外來鍵必須加上 Non-Null 限制。

🤖
AI 詳解
AI 專屬家教

【解題思路】先將 ERD 轉換為標準的關聯綱目(Relational Schema),再依據多對多關聯與弱實體的特性,界定參考完整性與 Null 限制。 【詳解】 已知轉換後的關聯綱目如下(主鍵加底線):

小題 (三)

找出修過名稱為‘John’開設所有課程並且都被當掉的學生

思路引導 VIP

這是一道經典的「全稱量詞(For All)」查詢題,在關聯代數中對應「除法(Division)」運算。遇到「所有」這類字眼,在 SQL 中通常有兩種解法:一是使用雙重 NOT EXISTS 將邏輯轉換為「不存在一門 John 開的課,該學生沒有被當」;二是利用 GROUP BYCOUNT,比較「學生被當掉的 John 的課程數」是否等於「John 總共開設的課程數」。

🤖
AI 詳解
AI 專屬家教

【解題思路】運用關聯代數中的「除法(Division)」概念,處理「所有(For All)」的條件限制。 【詳解】 本題提供兩種常見解法,考試時擇一作答即可。

🏷️ 相關主題

關聯式資料庫查詢與SQL應用實務
查看更多「[資訊處理] 資料庫應用」的主題分類考古題