調查局三等申論題
108年
[資訊科學組] 資料庫應用
第 一 題
📖 題組:
假設資料庫系統中定義了老師的授課資料,其中 instructor 表格定義了老師的教職員編號(IID)、姓名(name)和系別(dname)等三個屬性,而 teach 表格定義了老師的教職員編號(IID)、所教授的課程代碼(CID)和授課學年度。兩個表格如下所列,注意所有屬性皆為字串型態,且底線標示了各表格的主鍵(primary key): instructor (IID, name, dname) teach (IID, CID, year)
假設資料庫系統中定義了老師的授課資料,其中 instructor 表格定義了老師的教職員編號(IID)、姓名(name)和系別(dname)等三個屬性,而 teach 表格定義了老師的教職員編號(IID)、所教授的課程代碼(CID)和授課學年度。兩個表格如下所列,注意所有屬性皆為字串型態,且底線標示了各表格的主鍵(primary key): instructor (IID, name, dname) teach (IID, CID, year)
📝 此題為申論題,共 3 小題
小題 (一)
請寫出 SQL 查詢句(query statement),列出每個系的系名以及該系的授課老師個數。(10 分)
思路引導 VIP
本題關鍵在於同時涉及系名分組與授課紀錄的統計。思考時應注意使用 JOIN 結合兩張表格,利用 GROUP BY 對系所進行分組,並特別留意一位老師可能教授多門課程,需使用 COUNT(DISTINCT IID) 避免重複計算人數。
小題 (二)
請寫出 SQL 查詢句,列出名為「張三」的老師,於 106 學年度所有開設的課程代碼。(10 分)
思路引導 VIP
本題測驗基本的跨表關聯查詢(JOIN)與條件過濾能力。解題時應先確定目標欄位為課程代碼(CID),接著透過教職員編號(IID)將 instructor 與 teach 兩表進行內部連接(INNER JOIN),最後加上 WHERE 子句過濾姓名與學年度條件即可。
小題 (三)
請問以下 SQL 查詢句是為了找出什麼樣的資料?請用中文詳述其資料語意(semantics):(10 分)
SELECT IID, CID
FROM teach
WHERE year = ‘107’ and IID in(SELECT IID FROM instructor WHERE dname = ‘資工’);
思路引導 VIP
面對 SQL 語意解釋題,應採取「由內而外、先條件後結果」的拆解法。首先解析子查詢篩選出的實體特徵(如:資工系的老師),接著結合主查詢的過濾條件(如:107學年度),最後確認 SELECT 子句要求的輸出欄位(如:教職員編號與課程代碼),將其融合成一句通順的中文業務邏輯。