調查局三等申論題
109年
[資訊科學組] 資料庫應用
第 一 題
📖 題組:
已知某單位建置專案管理系統的關聯式資料庫關聯表及外鍵的參考定義如下: Employee(eID, eName, dID) FKs dID ref. Department(dID) Qualified(eID, sID, qDate) FKs eID ref. Employee(eID), sID ref. Skill(sID) Skill(sID, sName) Department(dID, dName) Project (pID, pOwner) FKs pOwner ref. Employee(eID) Participation(pID, eID) FKs pID ref. Project(pID), eID ref. Employee(eID)
已知某單位建置專案管理系統的關聯式資料庫關聯表及外鍵的參考定義如下: Employee(eID, eName, dID) FKs dID ref. Department(dID) Qualified(eID, sID, qDate) FKs eID ref. Employee(eID), sID ref. Skill(sID) Skill(sID, sName) Department(dID, dName) Project (pID, pOwner) FKs pOwner ref. Employee(eID) Participation(pID, eID) FKs pID ref. Project(pID), eID ref. Employee(eID)
📝 此題為申論題,共 2 小題
小題 (一)
請使用單一 SQL 查詢指令找出具備技能代號(sID)為’001’,但不具備有技能代號’002’技能的所有員工工號(eID)與員工姓名(eName)。(15分)
思路引導 VIP
看到這題,首先要辨識出這是「集合差集」或「子查詢過濾」的經典情境。解題策略是先將 Employee 與 Qualified 關聯,篩選出具備技能 '001' 的員工,再利用 NOT IN 或 NOT EXISTS 子查詢,排除掉 Qualified 表中具備技能 '002' 的員工。
小題 (二)
請使用單一 SQL 查詢指令列出部門代碼(dID)為’D01’的所有員工的資料,包含其員工工號(eID)與姓名(eName)及其曾參與專案的總次數,結果並依參與次數的多寡降冪排序。(10分)
思路引導 VIP
看到「列出...『所有』員工...及參與專案總次數」,應直覺想到需結合 Employee 與 Participation 兩表。關鍵在於處理「從未參與專案」的員工,因此強烈建議使用 LEFT JOIN 保留左表所有紀錄,並搭配 COUNT(Participation.pID) 計算次數與 GROUP BY 進行分組,最後加上 ORDER BY ... DESC 實現降冪排序。