【書評】 SQL的五十道練習-初學者友善的資料庫入門

發布日期:2024/02/10

緣起

為什麼會想要開始學SQL?

真要說起來的話,大概是因為在擔任IQVIA SAS programmer的這一年裡面,只要一遇到PROC SQL裡面的語法就會非常沒有自信,一定要一直對照前輩的語法來理解這一段程式碼在做什麼,其實備感艱辛。

而PROC SQL的整體語法其實就跟SQL的語法以及架構是相同的,所以想了想,與其從SAS裡面的PROC SQL語法開始學起,不如直接從最原始的SQL語法學起來打個底子,底子會比較穩固一些。

而且SQL的語法本身除了會用在SAS裡面以外,這個語言還會用在其他地方資料庫找查,甚至也被廣泛用於資料科學的重要語言之一,看起來從頭開始學也算是好處頗多。

因此,基於自己未來會持續往資料管理(Data management)以及資料科學(Data Science)的路上前進,所以在轉換工作休息的這段期間,就先以能夠提升資料科學能力與SAS programming能力的SQL語法作為第一選擇。

為什麼會選這本書?

按照筆者自己的學習習慣,因為這一段時間除了有創業的工作需要同時進行,也有很多東西想要看,因此沒有辦法花太多時間在一個知識的學習上面。

雖然SQL在網路上的免費資源其實非常多,但這一次因為對於SQL一開始沒有比較完善的知識架構,所以希望可以透過「一本書主義」來快速幫自己完整建立好SQL的知識架構。

如果可以的話,能夠從練習的程式安裝開始講解起,那肯定會是更好的。

而另外,SQL本身作為一個找查資料庫的語法,因此也希望找到的資源是能夠同時提供練習語法的資料庫。

畢竟學程式最重要的就是要一直反覆的program,才能從中去找到適合自己的思考路徑。

網路上的許多免費教學資源,雖然寫的都很詳細,但是架構稍微有一點不是很完整,而且也都未必有提供可以練習的資料庫。

所以筆者這一次就決定直接以付費資源為主。

一開始在網路上找的課程是Hahow的「SQL的五十道練習:初學者友善的資料庫入門」這一門課。

本來已經打算要購買課程了,結果沒想到某次在逛書局要購買給筆者自己的聖誕禮物時,偶然看到跟這一門課程同名的書。

翻看了一下覺得滿不錯的,厚度也沒有很厚,應該是在很短的時間內就可以快速上手SQL,就決定選擇他啦!

聖誕禮物同時購入的另外兩本書,也是筆者預計想要在轉換工作這段時間習得的技能們

關於這一本書

SQL的五十道練習書本的外觀,圖片來源為各大通路商城

既然是書評的話,自然這一篇的文章重點會放在這一本書對於SQL的學習上面是否有幫助,且有什麼樣的特色可以有效幫助新手學習SQL,提供給讀者作為參考。

線上的通路都有提供一部分書中的試看頁,讀者也可以稍微翻閱一下看看合不合自己的口味。

排版易讀且文字淺白

相較於主打為程式語言筆記類的深入淺出系列,SQL的五十道練習在文字的排版上面並不會顯得過於壅擠。

程式碼跟解說內文的部分也有很明顯的區分,程式碼的部分是用深灰色的區塊搭配不同字體。

如果在解說的部分會提到SQL敘述的程式碼,也會使用不同的字體來做區別。

因此對於一個新手在看這一本書的時候,易讀性很高,是可以很順順的往下讀。

而這一本書似乎也考量到,主要的客群是幾乎不具備其他程式語言基礎的新手,因此在撰寫上面使用的文字都是較為淺白的,不會給人一種很生澀或是使用大量專有名詞的困擾。

架構清楚且符合邏輯

在新手學習程式語言的時候,最害怕的就是一開始沒頭沒腦的就來一段程式碼,或是直接進入「Hello world」想讓讀者創造成就感。

這本書最一開始的時候先從什麼是「SQL」開始介紹起,說明SQL語法理面會有的架構、專有名詞分別代表的意義。

同時在第二章,這一本書也會告訴你該怎麼建立撰寫SQL的環境,讓你可以不用再另外去找練習的平台。

而後就會循序漸進的,從資料庫、資料表的認識開始,基本的條件式篩選、函數到後面的子查詢以及水平、垂直合併。

閱讀的過程中並不會有思考跳躍的感覺,也可以明顯感受到後面講到的觀念會跟前面的東西息息相關,並且可以互相做結合。

算是很不知不覺就可以直接把這本書無痛看完。

當然,Hello world的環節這一本書也是沒有少的XD,就在講解完SQL的基本觀念以及安裝好環境以後。

使用實際資料庫講解及有大量練習題

畢竟本書的名字叫做SQL的「50道練習」(笑),但其實確切來說不只有50道,而是59道作業才對。

而這個數量並不包含在前面講解觀念的時候順道帶的「例題」。

沒錯,我自己最喜歡這一本書的特色就是,他有非常多的例子講解,而且也有對應的資料庫可以提供大量的練習。

因為SQL本身是一種資料庫找查的語言,所以最怕的事情就是:學了一個觀念跟語法以後,沒有辦法馬上做練習。

而這一本書一開始就有提供4種不同的資料庫,每一個資料庫也對應了不同的資料表,所以並不需要擔心學習過後沒有辦法真的找到實際的資料庫來練習。

而因為輸出才是真正可以檢驗自己書念得怎麼樣的方式,這一本書很扎實的在每一個章節的後面都提供了對應的練習題。

一開始的練習題都滿簡單的,都是一段SQL的敘述可以解決,作業寫很快。

但越到後面,就會開始慢慢去用到前面所學過的所有內容,再配合新學到的。

舉例來說,在水平與垂直資料表結合的練習題中,就有包含資料表的條件式篩選、函數使用等需要在練習題裡面利用。

所以練習的過程中,會因為題目設計的關係,慢慢感受到自己可以處理的問題會越來越難。

當然所花費的時間就會越來越久XD,在寫最後第13章的綜合練習題時,總共10多題的題目筆者寫了一整個下午才寫完...。

但完成了以後認真覺得自己對於SQL的理解還有思考模式,都有很大的成長。

如果真的沒有辦法思考出來的話其實也不用太灰心,因為這一本書的後面都有每一題參考解法(也就是詳解啦)。

同時有對應的線上課程

誠如筆者最一開始所說,這一門課有在Hahow開對應的線上課程,所以如果讀者覺得自己看了幾章以後仍然略感吃力,那可以考慮購買Hahow的線上課程一併服用。

而且購買這一本書,可以得到對應線上課程的折扣碼,筆者自己是覺得滿划算的。

整體來說,這一本「SQL的五十道練習」,筆者自己覺得是一本厚度剛好、內容淺白而且具有大量練習題,對於SQL新手來說非常友善的一本好書。

但相對而言,對於想要精進SQL的讀者來說,這一本書的內容就顯得過於簡單了,當然也可以搭配這一本書作者在Hahow上面開的另外一堂課喔!

SQL從入門開始的學習方法

筆者雖然主要專攻的是前端語言HTML、CSS,但自己因為學習SAS多年,也有一定的python還有JavaScript的基礎,所以基本上對於程式語言來說並不算陌生。

加上在工作期間對於PROC SQL也累積了一定的基礎,所以在這一次學習SQL的時候反到會時常有一種「哦~原來是這樣啊」的感覺。

因為本來在學習PROC SQL的時候,其實很常會疑惑於為什麼架構是這樣,或是因為對於SQL的語法本身不是足夠了解,而沒有辦法有更進一步的變化與使用。

筆者自己以這一本書學習SQL的時候,會一邊看一邊做成電子筆記。

當然讀者可能會覺得,其實只要看過書就好,應該不太需要做什麼筆記才是。

但筆者自己看完這一本書以後,基本上這輩子可能就不會再翻第二次了,甚至很多時候會因為想要清空家裡購置更多的書而將他捐出去。

但有時候可能難免還是會需要找一下曾經看過的東西跟資料,如果是留存實體書本的話略有不便,因此才會每看一本書就會用電子檔記錄下曾經的學習內容。

以後也可以直接快速用3C產品的搜尋功能來找查,也會非常快速。

筆者自己的SQL筆記

書中講解觀念時候的程式碼,筆者自己也會另外找書中提供的資料庫來加以練習跟調整,看看會有甚麼不同的效果。

必要的時候會另外再看網路的資源,配合學習。

而對於每一個章節後面的練習題,筆者也都會跟著練習,並且確保最後查詢資料庫的長相跟解答中的一致,來避免自己漏掉任何東西。

所有練習題裡面花費筆者最久時間的題目,是利用2020年選舉的資料來計算兩黨得票率並整合在一張查詢表裡面的題目

上面這一題題目大概是花筆者最久時間的一題,但也是最接地氣的一題題目XDDD。

其實只要將本書的觀念看完,每一個練習都有好好跟著做的話,會發現其實SQL的底子就打得滿穩固的,除非需要額外再精進,否則是不需要再另外看其他材料來打底。

結語

其實在學習SQL語言的時候,很常會不小心帶入SAS語言的思考,想著「這個應該直接增加一個變數就好了吧?」

最明顯的,是在遇到某一個題目需要結合不同資料表然後加入標籤的時候,心裡想說:「這個不是用transpose就好了嗎?」結果發現SQL裡面的資料轉軸其實並不是一件簡單的事情...。

不禁讓人想到以前日文老師常說的:「這就是學習新東西的原罪(つみ),你雖然可以藉著舊有的知識學得比較快,但也容易受困於曾經學過的東西影響眼界。」

不過因為SQL算是好上手而且筆者自己有一定底子的語言,所以整個學習的時間並沒有花費太久,實際的時長大概就約2個禮拜的時間而已。

而學完了以後再回去看以前寫過的SAS中的PROC SQL語言,倒有一種真的理解在做甚麼,而且能夠加以活用的頓悟感。

這一篇文章也是若芽這個部落格的第一篇書評,但其實真要說這又不太是一篇純粹的書評,比較像是SQL入門學習的心得與方法分享。

趁著工作轉換的期間,其實筆者幫自己安排了非常多進修,之後會再慢慢把自己進修過程看的書、課程再慢慢分享上來,提供給需要的人參考囉: )。

那我們就下一篇文再見囉!

非常感謝您閱讀我的文章!您的支持和鼓勵是我不斷創作的動力。如果我的文章為您帶來了一些啟發或幫助,希望您可以透過以上贊助連結來支持我,讓我能夠繼續分享更多有價值的內容。不管金額大小,我都非常感激。謝謝您的支持和陪伴,期待和您繼續分享更多美好或實用的故事和經驗: )。