TL; DR 長話短說
我的 Hahow 好學校線上課程「SQL 的五十道練習:初學者友善的資料庫入門」自 2021 年 6 月開課至今累積了超過 1,400 位同學的加入、超過 4,000 份作業的繳交與批改、超過 200 個問題的討論與解決,這一切都要感謝大力支持我的修課學生,如果沒有你們的熱情參與和好評推薦,SQL 的五十道練習無法獲得如此亮眼的表現!
開課至今為期一年半之間,最寶貴的收穫莫過於和學員的交流討論,不只是 Hahow 好學校的學員,也有包含實體課程的台新銀行儲備幹部專班、台大資訊系統訓練班、台大數據分析社(NTUDAC)與政大商業分析社(NCCUBAC),我簡單、非系統性地整理了十個在學習資料分析與 SQL 常見的問題,分為四個學習前問題、三個學習中問題以及三個學習後問題,三階段共十個常見問題與我的回覆,藉此也讓對於資料分析與 SQL 有興趣的讀者作為參考。
學 SQL 前的四個問題
問題一:真的對程式碼一竅不通的人,有機會學好 SQL 嗎?
SQL(Structured Query Language)結構化查詢語言是宣告式語言的一種,並不像程式語言必須學習流程控制、函數或類別等概念,再加上語法和英文高度相似,例如 SELECT column_names FROM table_name
就是從資料表選擇欄位、CREATE table_name (...)
就是建立資料表、 ORDER BY column_name DESC
就是依照欄位內容遞減排序,因此,若是對程式碼一竅不通,但是有不錯的英文能力,學好 SQL 的機會是很高的;此外,在業界工作的很多產品經理、商業分析師或行銷經理在沒有程式設計的背景下,也都能撰寫很好的 SQL,所以從 SQL 的語言特性與業界許多的成功經驗來看,肯定有機會。
問題二:SQL 的能力要達到什麼程度,在分析相關的實習或工作上就算是夠用的呢?
SQL 雖然譯作結構化「查詢」語言,但可依用途再細分為資料定義(Data Definition Language, DDL)、資料操作(Data Manipulation Language, DML)與交易控制(Transaction Control Language, TCL),因此學習 SQL 的路徑可短可長,短的學習路徑就是精通查詢,而長的學習路徑還會涵蓋到定義、操作以及控制。幸運的是,以「數據分析相關的實習或工作」屬於短的學習路徑,只要能夠精通查詢語言,再加上一點建立檢視表的概念就夠用了。
問題三:想請問是否有推薦 SQL 的線上學習資源,以及有需要考 SQL 相關證照嗎?
老王賣瓜絕對自賣自誇,推薦可以參考我的 Hahow 好學校線上課程「SQL 的五十道練習:初學者友善的資料庫入門」。至於我自己曾經採用過的 SQL 線上學習資源包含有互動式教學:Codecademy、SQLBolt 與 SQLZOO,作為工具書參考用的則有:W3Schools 與 SQLite 官方文件。
至於 SQL 相關證照以「數據分析相關的實習或工作」來論應是不需要,不過若是想要走資料庫管理員(DataBase Administrator, DBA)職涯,有特定關聯式資料庫管理系統的證照(例如 Oracle Database Certificate、MS SQL Server Certificate)對於求職有不小幫助。
問題四:學習資料分析相關的程式語言時,該如何區別 SQL、Python 與 R 語言呢?
SQL、Python 與 R 語言從 Kaggle 2017 年開始的資料科學與機器學習調查中,連續六年(2017–2022)都是資料科學家與機器學習工程師工作最常使用的前三名程式語言,我們可以從「語言分類」與「應用場景」兩個面向來說明。
首先程式語言能夠區分為泛用型與專用型程式語言,所謂泛用型指的是語言在設計階段,開發者並沒有預先設想這門程式語言未來會被什麼樣的使用者採納,Python 就是屬於泛用型程式語言的一種;所用專用型則是與泛用型恰好相反,在設計階段開發者已經設想了這門程式語言未來的使用者樣貌,R 語言屬於科學計算專用型程式語言,我們可以從她內建有 array
與 matrix
這兩種用於數值運算的資料結構看出端倪;SQL 則屬於關聯式資料庫專用型程式語言,用於資料的查詢、定義、操作與控制。
其次是資料科學的應用場景可以大致區分為資料的載入、清理、轉換、視覺化、建模與溝通,在 Python 與 R 語言中我們所使用的資料集(Dataset)通常都是經由 SQL 查詢所生成的內容,再透過 Python 與 R 語言進行清理、轉換、視覺化、建模與溝通等應用,鮮少能夠直接將關連式資料庫中的資料表直接載入為資料集的情況,因此即便 Python 與 R 語言也具備資料載入的功能,但透過 SQL 查詢獲得適當資料內容的作法才是更有效率、也更為可行的做法。
學 SQL 中的三個問題
問題五:SQL 的保留字大小寫、換行或者縮排的有無是否都沒有差別?
是的,SQL 的保留字屬於大小寫「不敏感」(Case insensitive)特性,而有無換行、縮排也都不影響執行結果,唯一有差別的是可讀性(Readibility),以及寫作風格的偏愛,廣被採用的 Simon Holywell 寫作風格規範「保留字全大寫、換行並且靠右對齊縮排」。
問題六:有的時候文字要加上成對的單引號'Some Text'
有時候卻不用,要怎麼分辨呢?
我們可以將關聯式資料庫中的資料內容視為物件與值,物件指的是被資料定義語言(Data Definition Language, DDL)預先宣告好的命名對象,可能是資料庫名稱、資料表名稱或者欄位名稱,值指的是儲存格中所記錄的資料。利用文字參照物件的時候不需要使用成對的單引號、利用文字參照值的時候需要使用成對的單引號,簡單來說,參照資料庫名稱、資料表名稱或者欄位名稱時,不加成對的單引號;參照儲存格中的資料與常數時,必須加上成對的單引號。
問題七:SQL 的函數這麼多,是否需要全部背起來或者至少試著用過一次呢?
完全不需要,對於函數我們應該有的看待就像是看待參考書、工具書或者字典一般,我們不會將字典從頭看到尾,但是會知道該如何透過字典的索引去查找不認識的單字。同樣的道理,我們需要知道函數的使用結構為 FUNCTION(INPUTS, ARGUMENTS)
並且能夠掌握其分類型態、查詢文件的位置,例如函數的分類型態可以粗分為通用函數(Universal functions)與聚合函數(Aggregate functions),而常用的通用函數又可以細分為:
轉換資料型態的函數。
運算數值資料的函數。
處理文字資料的函數。
處理日期時間的函數。
而以課程所使用的 SQLite 而言,查詢文件可以在官網找到:
學 SQL 後的三個問題
問題八:學完基礎 SQL 之後是否有自行可嘗試的專案製作資源?
「SQL 的五十道練習:初學者友善的資料庫入門」是以查詢語言作為學習主軸的一堂入門課,如果希望能夠基於 SQL 的學習再進一步嘗試作品集專案,通常會需要與其他資料科學工具或網頁應用程式做結合,例如寫作爬蟲程式擷取自己有興趣的資料,像是課程中擷取 IMDb、NBA 的資料一般,經過整理後儲存為關聯式資料庫作為資料來源,並且在 Jupyter Notebook、RMarkdown 或者儀表板上,進行視覺化的展示;或者開發 Web API,建構資料庫資料的自動排程更新,有效率地提供前端視覺化介面品質良好的 RESTful API。但是整體來說,對於一個只有學過基礎 SQL 查詢的初學者而言,因為不具備程式設計、網頁工程的背景知識,要獨立製作專案是困難的,會建議先釐清想要產出的作品集、盤點所需技能和工具,再著手進行學習與實作,單憑基礎 SQL 就製作專案還是顯得過於單薄些,勢必得與資料科學工具或網頁應用程式做結合。
問題九:學完基礎 SQL 之後的下一步?
如果想在最短的期間展開 Job Hunting,可以再學一個商業智能(Business Intelligence)工具,例如 Tableau、Microsoft Power BI 或 Google Data Studio,兩者搭配起來就可以應徵許多商業分析師、初階資料分析師的職缺;假如能夠允許更多一點的前置準備期,可以再學一個程式語言,以 2022 年的市場趨勢來看,Python 是比 R 語言更多職缺的選項,不過相較於 R 語言將陣列、矩陣和資料框作為內建資料結構的設計,Python 必須走完整個程式設計的學習路徑才能夠自 NumPy 模組獲得陣列、由 Pandas 模組獲得資料框,勢必得花費比 R 語言更多的養成期間;不過大致看來學完基礎 SQL 之後的下一步,學習一個能夠滿足其他資料科學應用場景的程式語言,是明顯優勢的策略,也或許在五年、十年之後,這個程式語言的首選不再是 Python/R 語言,可能是 Rust/Julia 也未始而知。
問題十:課程中學習的是 SQLite,工作中如果用的是 Microsoft SQL Server、Oracle Database 或 MySQL 該怎麼辦才好?
如果將「SQL 的五十道練習:初學者友善的資料庫入門」比喻為小客車的駕訓班,我們在課程中所習得的技能,就像是路邊停車、倒車入庫、上坡起步與道路駕駛一般,並不會因為開的是駕訓班的學員車、自己買的四門轎車、運動休旅車或者電動車而有所差異,至少,其落差並沒有大到像是駕駛小客車更換到駕駛聯結車那樣,意即標準 SQL 的部分是放諸各種不同關聯式資料庫管理系統皆適用的,無需糾結於關聯式資料庫管理系統的差異。
讀完這十個在學習前、中、後三階段常被問到的問題,你是否對學習資料分析或 SQL 感到更為踏實、更有興趣了呢?加入我的 Hahow 好學校資料分析系列課程,一起透過練習題把資料分析與 SQL 學起來吧!
想知道更多學習資料分析與 SQL、Python、R 語言的知識嗎?參考我的「資料科學基石」系列課程: