2.
以星光俺行走江湖多年的經驗來看,學習者可以分為兩類,一類是被動的學習者,完全或者少有清醒的自我思考意識,書上寫什麼,我就看什麼,老師講什麼,我就聽什麼,啊,世界如此單純我亦無憂無慮不要長大不要……。還有一類是主動的學習者,簡而言之,TA知道自己學的是什麼,為什麼而學,怎麼樣才能學的透徹……
譬如說罷,咱們今天和以後分享的SQL、ADO等,後者就會問,這倆貨是什麼?為什麼要學呀?學了有什麼用啊?難不難學——和談戀愛比起來?
3.
那就先說SQL吧。
SQL是一種結構化查詢語言(Structured Query Language),是一種聲明式語言,敲黑板劃重點【結構化和聲明式】。SQL的核心是對表的引用,聲明你想從數據源中獲取什麼樣的結果,而不用告訴計算機如何才能夠得到結果——
後面這句話似乎很難理解,舉例來說,如上圖所示,有一份表格,其中一張工作表名為Sheet1,現在需要從中查詢成績大於等於80分的人員名單,如果用命令式程序語言,比如VBA,是這樣的:
Sub MyFind() Dim arr, brr, i&, k& arr = Sheet1.[a1].CurrentRegion ReDim brr(1 To UBound(arr), 1 To UBound(arr, 2)) For i = 1 To UBound(arr) If arr(i, 2) >= 80 Then k = k + 1 brr(k, 1) = arr(i, 1) brr(k, 2) = arr(i, 2) End If Next [d:f].ClearContents [d1].Resize(k, 2) = brrEnd Sub你需要通過VBA代碼告訴計算機每一步怎麼走,數據從哪裡來,從哪裡開始遍歷,行列是多少,符合條件的數據裝入哪裡,怎麼裝等等……
而如果用聲明式SQL語言呢?只要告訴計算機我要什麼就可以了。
SELECT 姓名,成績 FROM [Sheet1$] WHERE 成績>=80我要Sheet1表(FROM [Sheet1$])……成績大於等於80(WHERE 成績>=80)……姓名和成績的數據(SELECT 姓名,成績)。
只要結果,不問過程。
就醬紫的聲明式霸道總裁範。
沒有廣告的微信文是不真誠滴..▼
4.
為什麼要學習SQL In Excel(Excel支持的SQL語言)呢?
換言之,相比於Excel其它功能,例如函數、VBA、PP、PQ等,SQL有何優勢?
首先,必須嚴肅臉說明的是,對於普通Excel使用者而言,VBA、SQL以及以後提及的ADO並不是非學不可的,非學不可的是基礎操作、函數、透視表、圖表……
然而大數據時代,對於另外相當一部分表族而言,Excel用久了,慢慢的會意識到一個大問題;曾經在你心中無比強大的Excel函數,原來只適合小數據的騰挪躲閃;當數據量稍大後,函數這貨就像未嗑士力架的姚明——不來勁的很哩。
SQL In Excel則可以解決函數處理大數據效率低下的問題,嗯~使用SQL語言,你甚至可以將Excel作為前臺數據管理界面,資料庫(例如Access、SQL server等)作為後臺數據儲存倉庫,進而儲存、分析、管理遠超Excel體積的數據量。
打個響指,我們在VBA系列圖文教程裡講過,VBA處理數據的核心是數組+字典,倘若SQL和它比較起來有何優劣?
作為一個正努力成為樂觀主義者的人,我還是先說優點吧。
通過上面代碼的慄子我們很直觀的看到,SQL的書寫要比VBA編程簡潔的多,甚至有時候比小巧靈的函數還要簡潔;此外,SQL高效處理的數據量上限,也是遠遠大於VBA數組+字典的;字典裝上50W的數據,一般電腦的計算效率就開始垂直下降了,而SQL 還是風輕雲淡臉;最後,SQL+ADO+VBA可以通過Excel直接處理資料庫(例如ACCESS)來源的數據……。
然後說劣勢。
SQL作為一種資料庫結構化查詢語言,對表的結構和數據的類型有著嚴格的要求,而嚴格來說Excel並非資料庫,儘管它支持ADO和SQL(誰說裝了數據就是資料庫的?拉出去自彈小丁丁500下)。
Excel對表的結構和數據的類型並沒有嚴格的限定,例如合併單元格,多行表頭,空記錄,一列之內存在多種數據類型等等各種問題,因此,字典+數組處理EXCEL數據的靈活性要遠遠高於SQL,畢竟數組遍歷在手,天下我有,什麼合併單元格多行表頭,統統都是浮雲……
最後,SQL In Excel 和Power BI For Excel(以下簡稱Power BI)相比優勢在哪裡?
從Excel的角度講,SQL和Power BI最大的優勢是,SQL支持VBA語言。通過ADO執行SQL語言,VBA可以獲取、分析、管理多種來源的數據,甚至進而對獲取的數據再搭配字典、數組以及各種Excel自帶的功能作進一步自動化、智能化處理……換句話說,VBA運行SQL語句後,可以再整合Excel所有的功能進一步處理數據,除了Power BI,它和Excel其它功能並不是無縫銜接的——
從數據的角度講,Power BI是一款數據分析的軟體,包含了M和DAX查詢語言,SQL則是一種數據管理的語言。查詢和管理有何不同?簡而言之,SQL不但可以查詢數據,還可以操縱數據,例如增、改、刪等等。而M和DAX語言對數據原則上只能查詢,不能操縱。就像我們在Power BI入門教程中講的,它只能改變自己,無法改變對方(指的是數據源,不是咱們之間的感情)
另外,SQL是一門廣被接受和支持的語言。
Excel,Access,R,Python,JAVA,C,C#等等軟體和語言,均是支持SQL的;而POWER BI顯然沒有這樣的待遇。
我們很久以前說,作為一名數據分析員有三個必須掌握的技能,SQL獲得數據,EXCEL分析數據,PPT展現數據。POWER BI出現後,有人說學了POEWR BI,就不用學SQL了。如果你能意識到兩者之間的不同,顯然就會明白這是不可能的。
當然,如果你是一名數據分析員,POWER BI最好也是要學的。原因很簡單,它很簡單。
5.
說了這麼多,那麼,如何在Excel中使用SQL?
一般有三種方法。
一種是MS Query法,不常用,省略。
一種是OLE DB法,具體過程是,單擊Excel【數據】選項卡下的【現有連結】,在彈出的【現有連結】對話框中,單擊【瀏覽更多】,選取目標文件後,依次【確定】,得到下面的【導入數據】對話框。
這種方法通常搭配數據透視表(上圖顯示方式選擇【數據透視表(P)】),也可以搭配Power Pivot(高級版本Excel勾選上圖的【將此數據添加到數據模型】)。
單擊【屬性】按鈕後,得到【連結屬性】對話框,再單擊【定義(D)】選項卡,即可在【命令文本】編輯框中輸入SQL語句,並【確定】執行。
關於上圖【連接字符串】中的關鍵字和關聯值,我們會在以後的AOD部分詳加說明,此處先過。
最後一種是VBA+ADO法,也是我們後文中常使用的方法。
相比於第2種方法,VBA+ADO法的優點……
首先是自動化,它可以使用VBA代碼綁定ADO,設定連結字符串,執行SQL語句,進而一鍵獲取分析數據。其次,VBA編程可以使用變量編輯SQL語句,這遠比第2種方法手動輸入SQL語句要靈活智能的多,另外,VBA+ADO法不但可以SELECT(查詢)數據,還可以INSERT(增)DELETE(刪)UPDATE(改)資料庫的數據等。
6.
……握握爪,今天我們就先聊到這裡吧,下期我們簡單聊下ADO,然後聊SQL語言中最常用的SELECT語句……
嗯,忘記回答一個很重要的問題。
SQL難嗎?
入門很容易,精通很難。
對於EXCELer,並沒有精通的必要性,搭配ADO以及VBA自身的功能,例如數組和字典,入門SQL已經足夠了。
你要對……我有信心(忐忑臉)。
安,愛你們,下期見。
♥♥溫馨小提示▼
公眾號每天會發布1篇函數教程+1篇編程教程+1個技巧小視頻,如果你沒有收到我的更新,是由於微信按算法顯示公眾號而不是實際更新時間——這時就需要如下圖所示星標我一下啦,撒花✿