地特三等申論題
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
假設有個資料庫的 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 運算子配合萬用字元 % 來實作。
小題 (二)
若你寫下列 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 筆資料上,即可推導出正確結果。
小題 (三)
若你寫下列 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)得出最終結果。