免費開始練習
地特三等申論題 111年 [資訊處理] 資料庫應用

第 一 題

📖 題組:
假設有個資料庫的 Employee 表格,其屬性包含:編號 SID、姓名 Name、性別 Sex、居住街道地址 Street、居住城市 City、薪水 Salary、所屬部門編號 Dnumber。其目前的資料存於電腦中如下表,假設:身為程式設計師,你還不知電腦中有多少筆,及其詳細內容,但知道其綱要、欄位型態,並見到編號 SID 為 3001、4001 兩筆資料例子。 (表格資料請參考原卷) SID Name Sex Street City Salary Dnumber 1001 Alisa F 中山一路 30 號 Palmer 8000 50 2001 Beatrice F 信義南路 7 號 Lecanto 12000 30 3001 Abraham M 中山二路 60 號 Warrendale 7000 30 4001 Dana F 北中山一路 96 號 Enumclaw 6000 40 4044 Ferdinand M 忠孝北路 66 號 Alameda 9000 40 5055 Grace F 忠孝北路 99 號 Lecanto 25000 30 6004 John M 南中山一路 30 號 Waterloo 36000 40 6006 Philemen M 中山路 67 號 Smithville 16000 60 6008 Vince M 仁愛西路 80 號 Wautoma 15000 50
📝 此題為申論題,共 3 小題

小題 (一)

請寫出 SQL 查詢,來列出:不管住那個城市,居住街道有「中山」二字者之員工編號、姓名。(10 分)

思路引導 VIP

看到此題,首先確認選取的欄位為「員工編號」與「姓名」,並從「Employee」資料表查詢。條件「居住街道有『中山』二字」表示需對 Street 屬性進行字串的模糊比對,應聯想到使用 SQL 的 LIKE 運算子配合萬用字元 % 來實作。

🤖
AI 詳解
AI 專屬家教

【解題關鍵】使用 SQL 的 LIKE 運算子與萬用字元 % 進行字串模糊比對。 【解答】

小題 (二)

若你寫下列 SQL 查詢,請說明電腦會給你什麼結果(假設查詢時,資料庫目前只有上述 9 筆資料)。(10 分) SELECT Dnumber, COUNT(*)AS High_Sal_Count FROM Employee WHERE Salary > 10000 Group By Dnumber HAVING COUNT(*)> = 2;

思路引導 VIP

解此題務必遵循 SQL 引擎的實際執行順序:先做 WHERE 條件過濾列資料,接著用 GROUP BY 進行分組,再透過 HAVING 過濾分組後的群組結果,最後才是 SELECT 產出指定欄位。將這四個步驟逐一套用在題目提供的 9 筆資料上,即可推導出正確結果。

🤖
AI 詳解
AI 專屬家教

【解題思路】依照 SQL 語法的邏輯執行順序(WHERE → GROUP BY → HAVING → SELECT)逐步篩選與統計資料表資料。 【詳解】 Step 1(WHERE):先篩選出薪水(Salary)大於 10000 的員工記錄。符合條件的有:

小題 (三)

若你寫下列 SQL 查詢,請說明電腦又會給你什麼結果(假設查詢時,資料庫目前只有上述 9 筆資料)。(10 分) SELECT Dnumber, COUNT(*)AS High_Sal_Count FROM Employee WHERE Salary > 10000 AND Dnumber IN (SELECT Dnumber FROM Employee Group By Dnumber HAVING COUNT(*)> = 2) Group By Dnumber;

思路引導 VIP

看到巢狀 SQL 查詢題,應採取『由內而外』的拆解法。先獨立運算子查詢(Subquery)找出符合條件的集合,再將此集合代入外部查詢(Outer query)的 WHERE 條件過濾資料,最後執行 GROUP BY 與聚合函數(COUNT)得出最終結果。

🤖
AI 詳解
AI 專屬家教

【解題思路】依照 SQL 執行順序「由內而外」拆解:先執行子查詢找出符合條件的部門編號集合,再以此集合配合薪資條件過濾原資料表,最後進行分組與計數。 【詳解】 Step 1:執行子查詢 (Subquery)

升級 VIP 解鎖