地特三等申論題
110年
[資訊處理] 資料庫應用
第 一 題
📖 題組:
給定一個資料表,PersonIncome,其欄位與資料紀錄如下表,ID 是主鍵,name 是員工姓名,paydate 是員工收到工作費的日期,income 是工作費收入金額。此表總共有 12 筆資料紀錄。請回答下列相關問題: ID name paydate income C1001 王大陸 2008/02/28 25000 C1002 李大喬 2008/03/12 21000 C1003 趙麗生 2008/04/13 27000 C1004 黃球聲 2008/05/15 28000 C1005 王大陸 2009/06/28 27000 C1006 李曉喬 2009/07/12 23000 C1007 趙麗生 2009/08/13 17000 C1008 黃球聲 2010/09/15 25000 C1009 王大陸 2010/10/28 29000 C1010 李大喬 2010/11/12 28000 C1011 趙麗生 2010/12/13 28000 C1012 黃球聲 2011/01/15 27000
給定一個資料表,PersonIncome,其欄位與資料紀錄如下表,ID 是主鍵,name 是員工姓名,paydate 是員工收到工作費的日期,income 是工作費收入金額。此表總共有 12 筆資料紀錄。請回答下列相關問題: ID name paydate income C1001 王大陸 2008/02/28 25000 C1002 李大喬 2008/03/12 21000 C1003 趙麗生 2008/04/13 27000 C1004 黃球聲 2008/05/15 28000 C1005 王大陸 2009/06/28 27000 C1006 李曉喬 2009/07/12 23000 C1007 趙麗生 2009/08/13 17000 C1008 黃球聲 2010/09/15 25000 C1009 王大陸 2010/10/28 29000 C1010 李大喬 2010/11/12 28000 C1011 趙麗生 2010/12/13 28000 C1012 黃球聲 2011/01/15 27000
📝 此題為申論題,共 6 小題
小題 (一)
請寫出可查出收入金額大於 22000 或小於 26000 的資料紀錄之 SQL 查詢指令。(3 分)
思路引導 VIP
本題考查基本的 SQL 條件查詢語法。只需確定資料表名稱與欲查詢的欄位,並將條件「大於 22000」與「小於 26000」利用邏輯運算子 OR 連接,放入 WHERE 子句即可完成。
小題 (二)
請寫出可查出收入金額為 7 之倍數的資料紀錄之 SQL 查詢指令。(3 分)
思路引導 VIP
看到「某數的倍數」等數學條件,應立即聯想到 SQL 中的取餘數(模除)運算子 % 或 MOD() 函數。透過設定條件 income % 7 = 0,搭配基本的 SELECT 語法即可篩選出符合的完整資料紀錄。
小題 (三)
請寫出可查出名字中包含"大"的資料紀錄之 SQL 查詢指令。(2 分)
思路引導 VIP
看到「包含某個字」的查詢需求時,應直覺聯想到 SQL 的字串模糊比對運算子 LIKE,並搭配萬用字元 %(代表任意長度的字串)來包夾目標字元。
小題 (四)
請寫出可得到每個人個別的平均收入之 SQL 查詢指令。(3 分)
思路引導 VIP
看到「每個人個別的...」這類統計需求,首先應想到使用 GROUP BY 子句針對人員(如 name 欄位)進行資料分組。接著,針對需要計算平均值的欄位(income),使用 SQL 內建的聚合函數 AVG() 來求出各組的平均收入。
小題 (五)
要得到從 2008-05-01 到 2010-12-31 之間每個人個別的收入總額,請寫出對應之 SQL 查詢指令。(4 分)
思路引導 VIP
看到這題,首先確認目標為計算『每個人』的『收入總額』,並具備『特定日期區間』的限制條件。解題思路為:先用 WHERE 與 BETWEEN...AND 篩選出符合日期的資料,再以 GROUP BY 對姓名進行分組,最後透過聚合函數 SUM() 加總收入。
小題 (六)
要查出收入總額大於 70000 的有那些人,請寫出對應之 SQL 查詢指令。(5 分)
思路引導 VIP
看到「總額」,應立刻想到使用聚合函數 SUM();看到「哪些人」,代表需要用 GROUP BY name 進行分組。最後針對分組後的聚合結果進行條件篩選「大於 70000」,必須使用 HAVING 子句而非 WHERE。