SQL 早在 1970 年代就問世,但至今仍在大數據、資料科學、手機應用程式與網站開發等專業領域,扮演著「喊水會結凍」舉足輕重的要角。
在 Stack Overflow 2022 Developer Survey 中 SQL 於 Most Popular Technologies 中排名第三;在 2022 Kaggle ML & DS Survey 中 SQL 於 "What programming languages do you use on a regular basis ?" 排名第二,SQL 的重要性不言可喻。
基於 SQL 的重要性,2021 年我在 Hahow 好學校開設了「SQL 的五十道練習:初學者友善的資料庫入門」,感受到修課學生對 SQL 與資料庫的強烈需求與熱忱的學習動機,更有許多同學表示在完成所有練習題之後感到「意猶未盡」,希望能開設進階課程再提升自己的資料庫功力!
此外,也有許多同學對於「SQL 的五十道練習:初學者友善的資料庫入門」中的學習資料庫建立過程與設計思維感到趣味盎然,希望除了 SQL 的資料查詢語言以外,更深入學習資料定義語言、資料庫結構與資料表設計,讓同學能夠打造、設計自己有興趣的資料庫。
初階課與進階課的差異
在初階課程中,花費九成的篇幅聚焦在 SQL 的資料查詢功能,對於 SQL 的資料定義、資料操作功能僅有略微帶過,而對於 SQL 的資料控制、交易控制功能則是沒有涉獵;在進階課程中,我們將會深入介紹 SQL 的資料定義、資料操作、資料控制與交易控制功能,全面性地讓同學暸解 SQL 的完整功能,讓學員除了知道怎麼使用關聯式資料庫,更進一步瞭解怎麼建立與維護。
初階課程教學生透過 JOIN 與聯結鍵去關聯資料表的欄位,但由於學習資料庫的形式為建置完成的 SQLite 資料庫檔案,學生缺乏關聯式模型設計的練習;在進階課程完整包含資料定義、資料操作功能與資料表設計的課綱規劃下,我們將深入介紹關聯式模型設計的重要觀念,包含子女資料表、父母資料表、主鍵、外鍵、對應關係與正規化等。
初階課程沒有涉獵資料控制語言,因此選擇 SQLite 單人使用型的關聯式資料庫管理系統;在進階課程涵蓋資料控制語言的課綱規劃下,我們改採用 MySQL 多人使用型的關聯式資料庫管理系統,讓學生能夠一窺資料庫管理員的其中部分工作:使用者權限管理。
初階課程僅講述學習資料庫的資料來源與其格式,並直接提供建置完成的 SQLite 資料庫檔案,學生缺乏親手將原始資料整理為關聯式資料庫的練習;因此在進階課程包含資料表設計的課綱規劃下,我會融入「個案研究」使用 Python 程式語言示範如何從零到一建置關聯式資料庫,讓學生能夠一窺資料工程師的其中部分工作:ETL(Extract Transform Load)。
雖然進階課程涵蓋完整的 SQL 功能性,但是資料分析師最為倚重的 SQL 功能仍是「資料查詢」;在進階課程會介紹更多的查詢技巧,包含通用資料表達式、自連接、集合運算以及視窗函數,為了加強學生機考、面試或筆試的信心,會納入知名刷題網站 LeetCode 的練習題,作為課程的綜合練習與驗收。
- 子查詢、通用資料表達式(CTE)、檢視表與資料表之間的差異及應用場景。
- 如何管理資料庫中的物件,包含資料表欄位、觀測值以及使用者等。
- 如何管理資料表的約束,包含獨一、主鍵以及外鍵等。
- 如何設計資料庫與資料表儲存一對一對應(one-on-one)、一對多對應(one-on-many)與多對多對應(many-on-many)的關聯資料。
- 如何實踐資料表正規化(Normalization)中的第一正規化、第二正規化與第三正規化。
- 如何結合 Python 與 SQL 建立自己有興趣的資料庫。
- 如何應用進階的查詢技巧,包含集合運算、通用資料表達式(CTE)與視窗函數(Window functions)等。
- 如何寫作 LeetCode 的 SQL 練習題藉此增強機考或筆試的信心。
「進階 SQL 的五十道練習:資料庫功力再提升」會採用 EBL(Exercise Based Learning) 的學習理念,我們可以將 EBL 視為 PBL(Problem Based Learning)的輕量版,五十道練習都是明確並且給定預期輸出結果的題型,不會有開放式問題或者分組討論的設計。
課程所使用的資料庫貼近生活,包含 IMDB 網站的電影資料、Johns Hopkins Covid19 資料以及中選會選舉資料。
此外,每個單元都會包含 LPAA(Learn-Practice-Apply-Assess)四步驟,讓同學們的學習體驗更深刻也更完整
課程共有 11 個章節,從快速複習資料庫的重要觀念開始,每個單元包含 3-5 個不等的練習題,透過 LPAA 四步驟幫你進一步強化 SQL 能力。
- 快速複習重要的 SQL 與資料庫觀念
- 建立環境
- 快速複習基礎的 SQL 查詢敘述
- 資料定義語言
- 資料操作語言
- 資料控制語言
- 交易控制語言
- 資料庫結構與資料表設計
- 進階的 SQL 查詢
- LeetCode Curated SQL 70: Easy
- LeetCode Curated SQL 70: Medium
- (未解鎖)(募資達 1000% 解鎖)LeetCode Database: Hard
(未解鎖)募資達標 1000% ▶︎ 新增單元:LeetCode Database: Hard
(未解鎖)增加 LeetCode Database: Hard 的練習題與練習題詳解。
【募資解鎖活動】規則說明
➢ 募資達成率累計至「課程募資 30 天結束的那一刻」! ➢ 解鎖單元將於課程上架時「同步提供」!
- 「數聚點」粉絲頁:https://www.facebook.com/datainpoint
- 「數聚點」網站:https://www.datainpoint.com
講師作品
- R 語言的 50+ 練習:統計分析的前哨站
- Python 的 50+ 練習:資料科學學習手冊
- SQL 的五十道練習:初學者友善的資料庫入門
- 如何成為資料分析師:從問題解決到行動方案
- 新手村逃脫!初心者的 Python 機器學習攻略,2020
- 進擊的資料科學:Python 與 R 的應用實作,2019
- 輕鬆學習 R 語言:從基礎到應用,掌握資料科學的關鍵能力,第三版,2021
- 數聚點文摘:https://datainpoint.substack.com/about
- Medium 部落格:https://medium.com/datainpoint
- 方格子出版專題:https://vocus.cc/jovyan/home
回覆與作業設計
- 每一個單元都有不等題數的練習題需要同學動手練習。
- 寫完以後請同學自行執行批改測試程式碼。
- 強烈建議同學親手練習以後才觀看練習題詳解的影片。
- 開課後依照課程進度,暫定每兩週於問題討論區回覆 5 - 15 個同學關於課程或作業的問題,另外也會視同學修課進度於課程公告中發佈直播連結,與同學互動解答。
