1.
HI,大家好,我是星光。
我們……過去……
第1章講述了SQL In Excel的優劣。
第2章講述了如何在VBA中執行SQL,也就是簡單認識了下ADO。
現在……總算可以開始逐步分享SQL語句和實例了……
不過在這之前,還是需要對一些名詞做出解釋;這些名詞是SQL語句釋義中經常使用到的,所以務必有一個大概的了解。
1.1資料庫
資料庫是按照數據結構來組織、儲存和管理數據的倉庫,例如基礎的ACCESS軟體等。通常情況下,我們將一個Excel工作簿視為一個資料庫。是的,如您所知,Excel並不是資料庫,但這並不妨礙我們把它看成一個資料庫,進而使用SQL語言處理其中的數據。這就好比儘管男人不是女人,但一樣可以織毛衣、做月嫂……不過,得承認,生孩子之類的就確實太富有挑戰性了。
1.2數據表
數據表,或稱之為表,是資料庫最重要的組成部分之一,一個資料庫由一個或一組數據表組成。如果我們把這句話的「資料庫」,替換成「Excel工作簿」,就變成這樣:表是Excel工作簿最重要的組成部分之一,一個Excel工作簿由一個或一組表組成,你看,同樣也是成立的——因此,可以先將Excel工作表視為資料庫中的「表」,至於異同,以後再聊。
1.3記錄和欄位
如上圖所示,和Excel表格一樣,資料庫的表由行和列組成,只是不存在行號和列標,不存在單元格,相關值自然就不能使用A6、F4之類的單元格地址來表述。表的每一行描述實體的一個實例,稱之為記錄;每一列描述實體的一個特徵或屬性,稱之為欄位,列的標題稱之為欄位名或列標題,例如上圖中的「姓名」。
主鍵和外鍵……以後用到再說。
沒了。
2.
SQL的數據查詢和操縱語句包括SELECT、UPDATE、INSERT、DELETE等,也就是所謂的查改增刪,其中最重要、使用最頻繁的是SELECT查詢語句。查詢按照複雜性劃分,可以從一個簡單的語句返回所有表中所有的記錄,到用一個語句連結多個表並定義多種搜索條件……
現在,就讓我們從最簡單的部分走起吧——走你,少年。
SELECT語法如下(簡化版):
SELECT 欄位名 FROM 表名
SELECT關鍵字指明了要查詢的欄位名稱,FROM關鍵字指明了要獲取欄位信息的表的名稱。
倘若數據源是Excel表格,需要在表名後增加美元符號$,並用中括號包起來,例如[Sheet1$]。
另外需要說明的是,SQL語言對關鍵字大小寫不敏感。SELECT、select、Select都可以使用,作用等同;基於書寫規範化的原因,可能有些老師會要求關鍵字統一大寫;嗯,我不是老師,我還小;我的意見是新手期怎麼喜歡怎麼順眼怎麼來——你好就好,寵溺臉。
3.
分享一下SQL In Excel 常用欄位查詢語句以及常見問題的解決方法。
如下圖所示,是一份Excel表格,表名為學生表,內容是一些看見星光之類小學生的信息數據。
3.1,單個欄位查詢
假設我們需要查詢上圖所示表格的姓名列數據。語句如下:
SELECT 姓名 FROM [學生表$]
結果如下:
3.2,多個欄位查詢
假設我們需要查詢欄位為姓名/性別/愛好的記錄,語句如下:
SELECT 姓名,性別,愛好 FROM [學生表$]
不同欄位名之間使用英文逗號間隔,但最後一個欄位名不用。另外需要格外注意的是,英文逗號千萬別寫成中文逗號,當然,初學階段,別說千萬,億萬萬也沒辦法阻止咱們錯輸中文逗號情況的發生……反覆切換輸入法的中英文狀態真的是很煩的一匹……
上述語句查詢結果如下:
3.3,查詢所有欄位的快捷方式
如果我們需要提取所有欄位的數據呢?一種方法是將所有欄位名寫入SELECT語句中▼
SELECT ID,姓名,性別,年齡,愛好,得分 FROM [學生表$]
另外一種方法是,使用星號(*)選取所有列:
SELECT * FROM [學生表$]
兩者的區別在於,前者只選取指定欄位的數據,後者包括了指定表的所有數據。對於Excel表格而言,如果欄位名確定,出於安全考慮,通常使用前者更靠譜點兒。
3.4,別名的使用
如果我們需要更改查詢結果中的欄位名稱,例如我不喜歡欄位名「愛好」,我想把它改成「特長」,可以使用關鍵字as,as是英文alias 的縮寫,也就是「別名」的意思。語句如下:
SELECT 姓名,愛好 AS 特長 FROM [學生表$]
3.5,特殊欄位名的處理
當欄位名存在某些特殊字符,例如空格,或者當欄位名存在SQL的保留字,例如AS,該欄位名需要使用中括號括起來,避免因語法識別混亂,系統產生錯誤信息的提示。
舉個例子,如上圖所示,Excel表名為調查表,該表欄位名中有的存在空格(姓 名),有的使用了SQL的保留字as,如果需要查詢該表格姓名和地址的信息,SQL語句如下:
select [姓 名] , [as] from [調查表$]
查詢結果如下:
3.6,無欄位名情況的處理
之前講過,Excel並不是資料庫,對數據結構並沒有強制性要求,因為這樣的緣故,在使用SQL處理數據時,難免會碰上各種有趣的現象。例如,數據表純數據沒有標題行,再或者,標題行存在合併單元格等,以至於欄位名無法使用。此時,倘若需要獲取欄位數據,對欄位名通常使用f加序列號表示,引用表的第1列欄位名就是f1,第2列欄位名是f2,其餘依次類推。
如上圖所示,該表格沒有標題欄,如果我們需要查詢姓名和性別,代碼如下:
select f2 as 姓名,f3 as 性別 from [學生表$]
查詢結果如下:
還記得大明湖畔使用VBA+ADO執行SQL語句時,如果引用表不存在標題欄,需要修改連結字符串的哪個參數的項嗎?——出門右拐請重看第2章吧~
4.
今就聊這吧,上一章聊的太多了……所以今就簡單點,說話的方式簡單點……星光俺是一個態度嚴謹氣質活潑組織放心……省略一千字……的五有好少年。
點讚,安。