我知道我一直有雙隱形的翅膀, 帶我飛給我希望…… 1. 本文所有觀點及論述均是基于Excel平臺,更準確的說是MS Excel……如無特殊情況,文中將不再特殊說明。 2. 以星光俺行走江湖多年的經(jīng)驗來看,學(xué)習者可以分為兩類,一類是被動的學(xué)習者,完全或者少有清醒的自我思考意識,書上寫什么,我就看什么,老師講什么,我就聽什么,啊,世界如此單純我亦無憂無慮不要長大不要……。還有一類是主動的學(xué)習者,簡而言之,TA知道自己學(xué)的是什么,為什么而學(xué),怎么樣才能學(xué)的透徹…… 譬如說罷,咱們今天和以后分享的SQL、ADO等,后者就會問,這倆貨是什么?為什么要學(xué)呀?學(xué)了有什么用啊?難不難學(xué)——和談戀愛比起來? 3. 那就先說SQL吧。 SQL是一種結(jié)構(gòu)化查詢語言(Structured Query Language),是一種聲明式語言,敲黑板劃重點【結(jié)構(gòu)化和聲明式】。SQL的核心是對表的引用,聲明你想從數(shù)據(jù)源中獲取什么樣的結(jié)果,而不用告訴計算機如何才能夠得到結(jié)果—— 后面這句話似乎很難理解,舉例來說,倘若我們需要獲取上圖所示表格(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) = brr End Sub 你需要通過VBA編程告訴計算機每一步怎么走,數(shù)據(jù)從哪里來,從哪里開始遍歷,行列是多少,符合條件的數(shù)據(jù)裝入哪里,怎么裝等等…… 而如果用聲明式SQL語言呢?只要告訴計算機我要什么就可以了。 SELECT 姓名,成績 FROM [Sheet1$] WHERE 成績>=80 我要Sheet1表(FROM [Sheet1$])……成績大于等于80(WHERE 成績>=80)……姓名和成績的數(shù)據(jù)(SELECT 姓名,成績)。 只要結(jié)果,不問過程。 就醬紫的聲明式霸道總裁范。 4. 為什么要學(xué)習SQL In Excel(Excel支持的SQL語言)呢? 換言之,相比于Excel其它功能,例如函數(shù)、VBA、POWER PIVOT等,SQL有何優(yōu)勢? 首先,必須嚴肅臉說明的是,對于普通Excel使用者而言,VBA、SQL以及以后提及的ADO并不是非學(xué)不可的,非學(xué)不可的是基礎(chǔ)操作、函數(shù)、透視表、圖表…… 然而大數(shù)據(jù)時代,對于另外相當一部分表族而言,Excel用久了,慢慢的,會意識到一個大問題;曾經(jīng)在你心中無比強大的Excel函數(shù),原來只適合小數(shù)據(jù)的騰挪躲閃;當數(shù)據(jù)量稍大后,函數(shù)這貨就像未嗑士力架的姚明——不來勁的很哩。 SQL In Excel則可以解決函數(shù)處理大數(shù)據(jù)效率低下的問題,嗯~使用SQL語言,你甚至可以將Excel作為前臺數(shù)據(jù)管理界面,數(shù)據(jù)庫(例如ACCESS)作為后臺數(shù)據(jù)儲存?zhèn)}庫,進而儲存、分析、管理遠超Excel體積的數(shù)據(jù)量。 打個響指,我們之前講過,VBA處理數(shù)據(jù)的核心是數(shù)組 字典,倘若SQL和它比較起來有何優(yōu)劣? 作為一個正努力成為樂觀主義者的人,星光還是先說優(yōu)點吧。 通過上面代碼的栗子我們很直觀的看到,SQL的書寫要比VBA編程簡潔的多,甚至比小巧靈的函數(shù)還要簡潔;此外,SQL高效處理的數(shù)據(jù)量上限,也是遠遠大于VBA數(shù)組 字典的;字典裝上50W的數(shù)據(jù),一般電腦的計算效率就開始垂直下降了,而SQL 還是風輕云淡臉;最后,SQL ADO VBA可以通過Excel直接處理數(shù)據(jù)庫(例如ACCESS)來源的數(shù)據(jù)……。 然后說劣勢。 SQL作為一種數(shù)據(jù)庫結(jié)構(gòu)化查詢語言,對表的結(jié)構(gòu)和數(shù)據(jù)的類型有著嚴格的要求,而嚴格來說Excel并非數(shù)據(jù)庫,盡管它支持ADO和SQL(誰說裝了數(shù)據(jù)就是數(shù)據(jù)庫的?拉出去自彈小丁丁500下,好冷)。Excel對表的結(jié)構(gòu)和數(shù)據(jù)的類型并沒有嚴格的限定,例如合并單元格,多行表頭,空記錄,一列之內(nèi)存在多種數(shù)據(jù)類型等等劣跡存在,因此,字典 數(shù)組處理EXCEL數(shù)據(jù)的靈活性要遠遠高于SQL,畢竟數(shù)組遍歷在手,天下我有,什么合并單元格多行表頭,統(tǒng)統(tǒng)都是浮云…… 最后,SQL In Excel 和Power BI For Excel(以下簡稱Power BI)相比優(yōu)勢在哪里? 從Excel的角度講,SQL和Power BI最大的優(yōu)勢是,SQL支持VBA語言。通過ADO執(zhí)行SQL語言,VBA可以獲取、分析、管理多種來源的數(shù)據(jù),甚至進而對獲取的數(shù)據(jù)再搭配字典、數(shù)組以及各種Excel自帶的功能作進一步自動化、智能化處理……換句話說,VBA運行SQL語句后,可以再整合Excel所有的功能進一步處理數(shù)據(jù),除了Power BI——是的,Power BI不支持VBA,聳肩,無奈。 從數(shù)據(jù)的角度講,Power BI是一款數(shù)據(jù)分析的軟件,包含了M和DAX查詢語言,SQL則是一種數(shù)據(jù)管理的語言。查詢和管理有何不同?簡而言之,SQL不但可以查詢數(shù)據(jù),還可以操縱數(shù)據(jù),例如增、改、刪等等。而M和DAX語言對數(shù)據(jù)則只能查詢,不能操縱。就像我們在Power BI入門教程中講的,它只能改變自己,永遠無法改變對方(指的是數(shù)據(jù)源,不是我們的愛情) 另外,SQL是一門廣被接受和支持的語言。Excel,ACCESS,R,Python,JAVA,C等等軟件和語言,均是支持SQL的;而POWER BI顯然沒有這樣的待遇。 我們很久以說,作為一名數(shù)據(jù)分析員有三個必須掌握的技能,SQL獲得數(shù)據(jù),EXCEL分析數(shù)據(jù),PPT展現(xiàn)數(shù)據(jù)。POWER BI出現(xiàn)后,有人說學(xué)了POEWR BI,就不用學(xué)SQL了。如果你能意識到兩者之間的不同,顯然就會明白這是低頭說話不看前路哦。 當然,如果你是一名數(shù)據(jù)分析員,POWER BI最好也是要學(xué)的。原因很簡單,它很簡單。 5. 說了這么多,那么,如何在Excel中使用SQL? 一般有三種方法。 一種是MS Query法,不常用,省略。 一種是OLE DB法,具體過程是,單擊Excel【數(shù)據(jù)】選項卡下的【現(xiàn)有鏈接】,在彈出的【現(xiàn)有鏈接】對話框中,單擊【瀏覽更多】,選取目標文件后,依次【確定】,得到下面的【導(dǎo)入數(shù)據(jù)】對話框。 這種方法通常搭配數(shù)據(jù)透視表(上圖顯示方式選擇【數(shù)據(jù)透視表(P)】),也可以搭配Power Pivot(高級版本Excel勾選上圖的【將此數(shù)據(jù)添加到數(shù)據(jù)模型】)。 單擊【屬性】按鈕后,得到【鏈接屬性】對話框,再單擊【定義(D)】選項卡,即可在【命令文本】編輯框中輸入SQL語句,并【確定】執(zhí)行。 關(guān)于上圖【連接字符串】中的關(guān)鍵字和關(guān)聯(lián)值,我們會在以后的AOD部分詳加說明,此處先過。 最后一種是VBA ADO法,也是我們后文中常使用的方法。 相比于第2種方法,VBA ADO法的優(yōu)點…… 首先是自動化,它可以使用VBA代碼綁定ADO,設(shè)定鏈接字符串,執(zhí)行SQL語句,進而一鍵獲取分析數(shù)據(jù)。其次,VBA編程可以使用變量編輯SQL語句,這遠比第2種方法手動輸入SQL語句要靈活智能的多,另外,VBA ADO法不但可以SELECT(查詢)數(shù)據(jù),還可以INSERT(增)DELETE(刪)UPDATE(改)數(shù)據(jù)庫的數(shù)據(jù)等。 6. ……握握爪,今天我們就先聊到這里吧,下期我們簡單聊下ADO,然后聊SQL語言中最常用的SELECT語句…… 嗯,忘記回答一個很重要的問題。 SQL難嗎? 入門很容易,精通很難。 對于EXCELer,并沒有精通的必要性,搭配ADO以及VBA自身的功能,例如數(shù)組和字典,入門SQL已經(jīng)足夠了。 你要對……我有信心(忐忑臉)。 安,愛你們,下期見。 一碼不掃, ExcelHome VBA編程學(xué)習與實踐 |
|