SQL入門教程第03課::SQL查詢中欄位技巧的總結

2021-02-19 Excel星球

 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.

今就聊這吧,上一章聊的太多了……所以今就簡單點,說話的方式簡單點……星光俺是一個態度嚴謹氣質活潑組織放心……省略一千字……的五有好少年。

點讚,安。

從0到1, 從入門到實戰...
系統學習Excel函數、VBA編程等
推薦下方識別二維碼加入我的知識星球▼

從入門到精通全面學習Excel
學習中的表格問題社群在線實時答疑

相關焦點

  • SQL入門教程第03課:欄位技巧的總結
    我們……過去……第1章講述了SQL In Excel的優劣。第2章講述了如何在VBA中執行SQL,也就是簡單認識了下ADO。現在……總算可以開始逐步分享SQL語句和實例了……不過在這之前,還是需要對一些名詞做出解釋;這些名詞是SQL語句釋義中經常使用到的,所以務必有一個大概的了解。
  • Excel VBA+ADO+SQL入門教程003:SQL查詢中欄位技巧的總結
    Excel的行與列2,SELECT基本語法3,如何使用SQL查詢工作表中的欄位    3.1,單欄位查詢    3.2,多欄位查詢    3.3,別名的使用    3.4,使用通配符查詢所有欄位    3.5,含有特殊字符的欄位查詢
  • 大數據分析工程師入門9-Spark SQL
    本文為《大數據分析師入門課程》系列的第9篇,在本系列的第8篇-Spark基礎中,已經對Spark做了一個入門介紹,在此基礎上本篇拎出Spark SQL,主要站在使用者的角度來進行講解,需要注意的是本文中的例子的代碼均使用Scala語言。
  • sql替換資料庫欄位中的字符
    某些時候我們要修改資料庫欄位中的部分字符串,如果內容少時一個一個替換,內容多時,就不能一個一個的替換了,因為這樣不僅耗時還容易出錯。下面就用sql批量進行替換。替換shopping_hw表中欄位hw_pic,內容「*common」替換為「+play」.
  • 如何學習SQL語言
    為了幫助剛畢業找工作,或者想轉行成為數據分析師工作的朋友,我會用下面內容教會你怎樣用最快速、最容易理解的方式學會資料庫和SQL,並使用SQL進行數據分析:1.入門2.簡單查詢3.匯總分析4.複雜查詢5.多表查詢6.求職面試題7.檢驗SQL的學習效果第1部分:入門學習以下內容:1)了解資料庫的基本概念
  • 產品經理學SQL(二)一天學會用SQL解決業務查詢問題
    本篇文章意在幫助大家系統地入門SQL,教大家如何解決sql查詢任務。前言回顧一下,上一篇文章我們已經知道了SQL語言的基本框架,並能完成簡單的單表查詢和雙表連接查詢。這篇文章希望能幫助你系統地入門SQL,從而解決產品經理80%的sql查詢任務。和上篇的一個小時入門SQL一樣,這篇文章的建議學習時間為一天。
  • SQL基礎培訓--SQL語言基本概念及簡單查詢
    什麼是SQL語句,及簡單的寫法sql 語句是對資料庫進行操作的一種語言。結構化查詢語言(Structured Query Language)簡稱SQL,結構化查詢語言是一種資料庫查詢和程序設計語言,用於存取數據以及查詢、更新和管理關係資料庫系統。
  • SQL是一門手藝
    實際上也有戲稱是標準查詢語言的,並不為過,SQL誕生於1974年,基於關係資料庫(也就是表格),發展至今毫無衰落跡象,反而滲透到各個數據處理工具/系統中:傳統資料庫、Hive數據倉庫、MongoDB支持類SQL,甚至玩dataframe表格的R語言也可以通過sqldf包寫sql,Spark、Flink也可以寫SQL,等等。玩數據分析,學好SQL無往而不利。
  • Django QuerySet查詢基礎與技巧.有了她,再也不用擔心SQL注入了.
    假如碰到模型變動(改名、增刪欄位等),SQL可能又要重新調整。所以,能使用QuerySet的情況下,最好使用QuerySet。還有重要一點,QuerySet是懶惰的。創建一個QuerySet對象,它不會直接返回數據集。等到使用它的時候,才解析該對象得到數據集。而且解析過一次會被緩存起來,下次使用時直接返回緩存中的數據,緩存的使用提高多次查詢的效率。
  • 如何用 SQL 的方式打開 Pandas?
    # 導入相關庫import numpy as npimport pandas as pdfrom pandasql import sqldf, load_meat, load_births基礎pandasql 中的主要函數是 sqldf,它接收兩個參數:一個SQL 查詢語句;一組會話/環境變量(locals() 或 globals
  • 一次神奇的 sql 查詢經歷,group by 慢查詢優化記錄
    一、問題背景  現網出現慢查詢,在500萬數量級的情況下,單表查詢速度在30多秒,需要對sql進行優化,sql如下:  我在測試環境構造了500萬條數據,模擬了這個慢查詢。  簡單來說,就是查詢一定條件下,都有哪些用戶的,很簡單的sql,可以看到,查詢耗時為37秒。
  • 優化SQL查詢:如何寫出高性能SQL語句
    比如在where條件中的欄位是「傾斜欄位」的時候。「傾斜欄位」指該列中的絕大多數的值都是相同的,比如一張人口調查表,其中「民族」這列,90%以上都是漢族。那麼如果一個SQL語句要查詢30歲的漢族人口有多少,那「民族」這列必然要被放在where條件中。這個時候如果採用綁定變量@nation會存在很大問題。
  • 美團開源 SQL 優化工具 SQLAdvisor,與內部版本保持一致
    /sqladvisor -h xx -P xx -u xx -pxx -d xx -q "SELECT id FROM crm_loan WHERE id_card = '1234567'"SQLAdvisor輸出: alter table crm_loan add index idx_id_card(id_card)SQLAdvisor 快速入門教程
  • 數據分析利器 pandas 系列教程(四):對比 sql 學 pandas
    教程的第四篇,本篇將對比 sql 語言,學習 pandas 中各種類 sql 操作,文章篇幅較長,可以先收藏後食用,但不可以收藏後積灰~為了方便,依然以下面這個 DataFrame 為例,其變量名為 df,設有一同樣結構的 SQL 表,表名為 tb:
  • oracle sql 查詢突然變慢-百家號 - 百度經驗
    一條sql突然執行變慢,耗時9秒,應用是不能改的,只能從資料庫方面下手解決步驟思路:1:查看sql是否走索引2:查看索引是否失效3:hint 強制走索引(只是用來查看hint狀態下,查詢是否更改,應用是不能改的)4:收集該表所有信息(包括索引)5:分析該表所有信息(包括索引)6:再次執行並查看注意
  • hive sql 優化心得
    This can be optimizedlater to patch the tree我們sql中都會用到列裁剪。所謂列裁剪就是在查詢時只讀取需要的列,分區裁剪就是只讀取需要的分區。PDD(Predicate Pushdown)謂詞下推優化器,在許多資料庫中都會使用到,簡單說就是把後面的查詢條件前置,以下面sql來講:select a.*, b.* from a join b on (a.col1
  • SAS SQL 跨表查詢及多個欄位聯合查詢程序分享
    在實際工作中經常碰到多個表之間的查詢,通過某個或某幾個索引欄位實現跨庫查詢,信息合併。
  • mysql常用sql語句總結
    sql的內連接、外連接和交叉連接查詢等。內連接查詢在表中存在至少一個匹配時,INNER JOIN 關鍵字返回行。FROM 子句中的表或視圖可通過內聯接或完整外部聯接按任意順序指定;但是,用左或右向外聯接指定表或視圖時,表或視圖的順序很重要。有關使用左或右向外聯接排列表的更多信息,請參見使用外聯接。聯合查詢union查詢語法:sql1 union all sql2;UNION 操作符用於合併兩個或多個 SELECT 語句的結果集。
  • desc巧用及反引號 ` SQL注入——【61dctf】 inject writeup
    = "select 'flag{xxx}' from secret_{$table}";$ret = sql_query($sql);關於反引號反引號 ` 在mysql中是為了區分mysql中的保留字符與普通字符而引入的符號例如,如果test表中存在一個」from」欄位,當我們查找內容時,就需要使用反引號,以防使用保留字符而報錯
  • SQL Server 動態行轉列(參數化表名、分組列、行轉列欄位、欄位值)
    今天跟大家分享SQL Server 動態行轉列(參數化表名、分組列、行轉列欄位、欄位值)的知識。一.本文所涉及的內容(Contents)本文所涉及的內容(Contents)背景(Contexts)實現代碼(SQL Codes)方法一:使用拼接SQL,靜態列欄位;方法二:使用拼接SQL,動態列欄位;方法三:使用PIVOT關係運算符,靜態列欄位;方法四:使用PIVOT關係運算符