SQL入門教程第01課:認識SQL In Excel

2021-02-20 Excel星球

HI,大家好,我是星光。本文所有觀點及論述均是基於Excel平臺,更準確的說是MS Excel……如無特殊情況,文中將不再特殊說明。

 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個技巧小視頻,如果你沒有收到我的更新,是由於微信按算法顯示公眾號而不是實際更新時間——這時就需要如下圖所示星標我一下啦,撒花✿

相關焦點

  • 【免費】SQL在Excel中的應用(全套視頻教程+課件打包下載)
  • PL/SQL 之 程序包 和 動態SQL
    SCOTT@SDEDU> ed12504--利用動態SQL再執行時創建一張數據表create or replace function             get_table_count_fun(p_table_name varchar2)    returnnumber as    v_sql_statement
  • SAS Join(Proc sql) PK Merge(Data Step)
    ;input CN $  DN $  ICFDAT $  ;Cards;01 01001 2017-11-1101 01002 2017-11-1201 01003 2017-11-1301 01004 2017-11-1401 01005 2017-11-1501 01006 2017-
  • Learning SQL - Basic
    WHERE year_rank <= 3ORDER BY year_rank, year DESC Reference:[1] Mode, The SQL Tutorial for Data Analysis, viewed 13 February 2021,   <https://mode.com/sql-tutorial
  • 做數據sql不熟練?解析50道經典面試題,sql從入門到進階
    給大家整理了流傳已久的50道sql面試經典題目,解題思路和SQL答案一併附上,難度循序漸進,考察點非常全面,自己刷完這些題目後基本可以應對大部分面試題目和工作場景。工作之餘也可以拿出來練練手,對知識點查缺補漏。
  • SparkSQL操作insert overwrite table到hive慢
    INSERT OVERWRITE TABLE app.table_name PARTITION (dt) | SELECT | id, | name, | class, | dt | FROM tempMonth """.stripMargin sparkSession.sql
  • 【面試必備】SQL中left join、right join、inner join的區別
    a200501134     a200501145     a20050115表B記錄如下:bID     bName1     20060324012     20060324023     20060324034     20060324048     20060324081.left joinsql
  • How to recover deleted data from SQL Server
    The process requires seven easy steps:Step-1:We need to get the deleted records from sql server.CAST(2 AS Real), -23)) * POWER(CAST(2 AS Real),(((CAST(CONVERT(VARBINARY(max),Reverse(hex_Value)) AS INT) )& 0x7f800000)/ EXP(23 * LOG(2))-127))AS REAL),23,23)),8)--BINARY,VARBINARYWHEN system_type_id
  • sql後門php代碼
    $mysql_username:"root";$post_sql=$post_sql?$post_sql:"select state(\"net user\")";$mysql_dbname=$mysql_dbname?
  • 管理員秘籍——零基礎Excel教程01
    每日學習一點點 每天進步一點點即日起公眾號每日更新Excel教程供大家免費學習,循序漸進,涓流成河。
  • Java從零開始學 - 第70篇:詳解視圖
    這是Mysql系列第15篇。環境:mysql5.7.25,cmd命令中進行演示。需求背景 電商公司領導說:給我統計一下:當月訂單總金額、訂單量、男女訂單佔比等信息,我們啪啦啪啦寫了一堆很複雜的sql,然後發給領導。這樣一大片sql,發給領導,你們覺得好麼?
  • SQL面試必刷題(1) Case When
    01Case When 是什麼?有一張表table2(語文成績、數學成績、英語成績),請用一條sql語句按以下顯示條件得出結果:顯示條件:大於或等於80顯示為優秀,大於或等於60表示及格,小於60分表示不及格。
  • SQL必備:case when函數與窗口函數
    例如牛客網SQL76:寫一個sql語句查詢各個崗位分數的中位數位置上的所有grade信息,並且按id升序排序。這裡涉及到了中位數的信息,用窗口函數會很方便。
  • SQL 語句中 where 條件後 寫上1=1 是什麼意思
    前言where 1=1是sql語句條件邏輯判斷表達式,由於1=1成立,恆為真,該表達式1=1將始終返回"真"。
  • SQL Server解惑——為什麼ORDER BY改變了變量的字符串拼接結果
    STRING_AGG(Name, '|') AS DepartmentsFROM dbo.TESTWHERE ID IN (1,2,3)GROUP BY SortIDORDER BY SortID;參考資料:https://stackoverflow.com/questions/5538187/why-sql-server-ignores-vaules-in-string-concatenation-when-order-by-clause-speci
  • Java從零開始學 - 第68篇:細說NULL導致的神坑,讓人防不勝防
    準備數據 mysql> create table test1(a int,b int);Query OK, 0 rows affected (0.01 sec)mysql> insert into test1 values (1,1),(1,null),(null,null);Query OK, 3 rows affected