[數據分析#28] 最白話的 SQL 語法教學攻略:10 個我最常用的

今天這篇 SQL 教學,會包含我自己覺得最簡單、實用的 10 個語法,我會用最簡單、最白話的方式讓大家了解這幾個指令:

  • 基礎必會語法,也就是最簡單的 SQL 組成:
    1. SELECT, 2) FROM, 3) WHERE, 4) JOIN, 5) GROUP BY, 6) ORDER BY
  • 其它基礎、好懂、實用的用法:
    1. IN, 8) WITH, 9) LIKE, 10) DISTINCT

這篇除了教語法跟語法的架構外,也會提供實作的練習題,讓大家可以練習!

6 大基礎語法

先介紹一下範例的資料表

  • 總共有 2 張資料表
    • 第一張:Lisa 的收支統計表,欄位包含:
      • 日期
      • 類型:只有 2 種類型:支出、收入
      • 類型細項:有旅遊、餐食、薪資、稿費 4 種細項
      • 金額:錢的金額
      • 交易銀行:玉山、中信
      • 載具:錢進來以及流出使用的載用,信用卡、現金、銀行帳號
    • 第二張:Lisa 的銀行帳戶管理,欄位包含:
      • 交易銀行:玉山、中信
      • 帳號:銀行帳號的數字,但這組數字是沒有統計的意義
    • 兩張表的唯一關聯在「交易銀行」,也是用來串聯兩張表的關鍵欄位
日期類型類型細項金額交易銀行載具
2022/1/1支出旅遊10000玉山信用卡
2022/1/2支出餐食500中信信金
2022/1/3收入薪資20000中信銀行帳號
2022/2/1收入稿費1000中信銀行帳號
第一張表:收支統計
交易銀行帳號
玉山1234
中信2345
第二張表:銀行帳號管理

SQL: SELECT, FROM

  • SELECT 跟 FROM 會一起介紹是因為,這兩個語法是必要的,意思是選取 (SELECT) 我們要的資料從 (FROM) 哪一張指定的資料表中
  • SELECT:選取要的欄位
  • FROM:從哪一個資料庫裡的資料表
SELECT 日期
       , 類型
       , 金額
SELECT 日期
       , 類型
       , 金額
FROM 收支統計

SQL: WHERE

  • WHERE:可以放的是想要篩選的條件
SELECT 日期
       , 類型
       , 金額
FROM 收支統計
WHERE 類型 = '支出'

SQL: JOIN (4 種 JOIN 用法)

SELECT 交易銀行
       , 帳號
       , SUM(金額) 
FROM 收支統計 a
LEFT JOIN 銀行帳號管理 b
ON a.交易銀行 = b.交易銀行
WHERE 載具 = '信用卡' and 類型 = '支出'
GROUP BY 交易銀行, 帳號
  • JOIN 用法:FROM A 表 (收支統計表) JOIN B 表 (銀行帳號管理表) ON A.key = B.key
    • 例如說,我們有兩個表 (收支統計表、銀行帳號管理表),可以用 JOIN 將這兩個表串聯在一起,只要兩個表之間有相同的欄位 (這兩個表之間相同的欄位是交易銀行),因此兩個表可以用交易銀行這個 key,以 JOIN 跟 ON 結合成一個總表
    • 用完 JOIN 之後,查找的資料表就會變成下面這樣,JOIN 可以連結無數張資料表,只要有共同的欄位可以串聯
日期類型類型細項金額交易銀行載具帳號
2022/1/1支出旅遊10000玉山信用卡1234
2022/1/2支出餐食500中信信金2345
2022/1/3收入薪資20000中信銀行帳號2345
2022/2/1收入稿費1000中信銀行帳號2345
  • 有 JOIN 就一定有 FROM,JOIN 總共有 4 個用法,用來連結兩個表,我最常用的是 LEFT JOIN,也覺得 LEFT JOIN 最重要,JOIN 會跟 ON 一起用
    • LEFT JOIN:輸出所有 A 表的值,B 表依照連結的結果貼上值
    • INNER JOIN:結合後只保留 A 表 & B 表都有值的
    • RIGHT JOIN:以 B 表為主,A 表依照 key 貼上值
    • OUTER JOIN (FULL JOIN):保留所有 A 表 & B 表 的值
  • 這邊用 2 張圖解釋 4 種 JOIN 不同到底在哪?
4種SQL JOIN差別
4 種 SQL JOIN 的差別:INNER JOIN、LEFT JOIN、RIGHT JOIN、OUTER JOIN (FULL JOIN)
4種SQL JOIN舉例
4 種 SQL JOIN 的舉例:INNER JOIN、LEFT JOIN、RIGHT JOIN、OUTER JOIN (FULL JOIN)

SQL: GROUP BY

  • GROUP BY:如果有計算,最後要將剩下所有非計算的欄位做一個聚合 (Aggregation),這時候就要用到 GROUP BY
  • 什麼是非計算的維度?資料表分為兩種欄位,一種是維度 (Dimension),一種是數字 (Measures),簡單來說,維度就是不能被計算的 (加減乘除),數字是可以被計算的
SELECT 日期
       , 類型
       , SUM(金額) --計算
FROM 收支統計
WHERE 類型 = '支出'
GROUP BY 日期, 類型 --除了計算值以外的欄位,都要放入

SQL: ORDER BY

  • ORDER BY:將輸出的資料進行排序,ASC 為由小到大排序,DESC 為由大到小排序
SELECT 日期
       , 類型
       , SUM(金額) --計算
FROM 收支統計
WHERE 類型 = '支出'
GROUP BY 日期, 類型 
ORDER BY 日期 ASC --以日期順序排列,ASC 為由小到大, DESC 為由大到小

4 個基礎實用語法

SQL: IN

  • IN:通常會跟 WHERE 一起出現
    • 當條件有 2 個以上,例如:WHERE 類型細項 IN (‘薪資’, ‘稿費’)
    • 當條件要從其他資料庫裡取出時會用到,例如:WHERE 類型細項 IN (SELECT * from 資料表)
SELECT 日期
       , 類型細項
       , SUM(金額) --計算
FROM 收支統計
WHERE 類型細項 IN ('薪資', '稿費') --當條件有 2 個以上
GROUP BY 日期, 類型 
ORDER BY 日期 ASC --以日期順序排列,ASC 為由小到大, DESC 為由大到小

SQL: WITH

  • 在學 WITH 之前,要知道什麼是子查詢,子查詢就是一段 SQL 指令會出現兩個以上的 SELECT,在一段 SQL 查詢當中的 FROM 來源或是 WHERE 條件是來自另外一段 SQL 查詢

SELECT 日期
       , 類型
       , SUM(金額) --計算
FROM 收支統計
WHERE 類型 = '支出'
AND 交易銀行 IN (SELECT 交易銀行 FROM 銀行帳號管理)
GROUP BY 日期, 類型 
ORDER BY 日期 ASC --以日期順序排列,ASC 為由小到大, DESC 為由大到小
  • WITH:可以用來取代查詢中的查詢,也稱為子查詢 (Subquery),子查詢跟 WITH 都很好用
    • 這個是 WITH 的用法:
WITH 銀行資訊 AS (
SELECT 交易銀行
FROM 銀行帳號管理
)

SELECT 日期
       , 類型
       , SUM(金額) --計算
FROM 收支統計
WHERE 類型 = '支出'
AND 交易銀行 IN (SELECT * FROM 銀行資訊)
GROUP BY 日期, 類型 
ORDER BY 日期 ASC --以日期順序排列,ASC 為由小到大, DESC 為由大到小
  • 這兩個範例的結果是一樣的,需要用到子查詢或是 WHERE 的原因是,我的 WHERE 條件需要從另外一張資料表裡面取得

SQL: LIKE、REGEXP_LIKE

  • LIKE:通常也是跟著 WHERE 一起出現,用來比較字串是否包含你要的結果,例如:
SELECT 日期
       , 類型
       , SUM(金額) --計算
FROM 收支統計
WHERE 類型 = '支出'
AND 交易銀行 LIKE '%中信%'
GROUP BY 日期, 類型 
ORDER BY 日期 ASC --以日期順序排列,ASC 為由小到大, DESC 為由大到小
  • REGEXP_LIKE 跟 LIKE 很類似,兩種用法都可以:

SELECT 日期
       , 類型
       , SUM(金額) --計算
FROM 收支統計
WHERE 類型 = '支出'
AND REGEXP_LIKE (交易銀行, '支出')
GROUP BY 日期, 類型 
ORDER BY 日期 ASC --以日期順序排列,ASC 為由小到大, DESC 為由大到小

SQL: DISTINCT

  • DISTINCT:取出不重複的值,假設想知道載具在收支統計表中總共有幾種,就可以用 DISTINCT 將結果叫出
SELECT DISTINCT 載具
FROM 收支統計

Google BigQuery 練習

掌握學 SQL 的最快方法

  • 練習絕對是學 SQL 最快的方法,跟大家分享練習的步驟:
    1. 先了解手上的資料表,裡面到底存了什麼資料
    2. 學習匯入資料表 (用 Google BigQuery 可以免費匯入資料表)
    3. 不用死記,要用很好懂的案例去記住這些常見的語法

了解資料表

  • 收支統計:這張表紀錄了收入與支出的細項
    • 欄位包含以下幾個,常見的資料儲存方式有 DATE 日期、String 字串、數字 INTEGER,數字可以用來做運算
      • 日期 (DATE)
      • 類型 (String):只有 2 種類型:支出、收入
      • 類型細項 (String):有旅遊、餐食、薪資、稿費 4 種細項
      • 金額 (INTEGER):錢的金額
      • 交易銀行 (String):玉山、中信
      • 載具 (String):錢進來以及流出使用的載用,信用卡、現金、銀行帳號
日期類型類型細項金額交易銀行載具
2022/1/1支出旅遊10000玉山信用卡
2022/1/2支出餐食500中信信金
2022/1/3收入薪資20000中信銀行帳號
2022/2/1收入稿費1000中信銀行帳號
  • 銀行帳號管理:這張表紀錄了銀行帳戶的帳號資訊
    • 欄位包含以下:
      • 交易銀行 (String):玉山、中信
      • 帳號 (INTEGER):銀行帳號的數字,但這組數字是沒有統計的意義
交易銀行帳號
玉山1234
中信2345
  • 這兩張表裡面共同的欄位是:交易銀行,因此這個值可以將兩張表以 JOIN 的方式,結合在一起
    • 這兩張表的目的就是紀錄此人每天的交易行為,同時也記錄他持有的銀行資訊
日期類型類型細項金額交易銀行載具帳號
2022/1/1支出旅遊10000玉山信用卡1234
2022/1/2支出餐食500中信信金2345
2022/1/3收入薪資20000中信銀行帳號2345
2022/2/1收入稿費1000中信銀行帳號2345

學習匯入資料表

  • Google BigQuery 沙盒
  • 建立專案:開啟一個屬於自己練習的專案
  • 建立資料集:有點類似公司的資料庫 Data Base
  • 建立資料表:資料集裡面可以存放很多資料表 Table
    • 步驟一:以 Google Sheet 匯入資料表匯入的欄位區間省略表頭 (第一列)
    • 步驟二:自行建立欄位名稱:需要用英文
  • 回到專案內,開始練習寫語法
  • 資料集提供給大家:Lisa 的財務資訊
  • 之前有寫過一篇:Google BigQuery 教學:3 分鐘完成資料匯入跟 SQL 查詢
Google Bigquery 沙盒練習 SQL
自己匯入資料庫後練習 SQL

學習寫語法

  1. 練習以 JOIN 的方式,將兩張資料表結合後叫出
日期類型類型細項金額交易銀行載具帳號
  1. 計算出每種類型細項的花費
類型細項金額

總結與學習資源推薦

這次這篇跟大家分享我最常用的 10 個簡單 SQL 語法,如果要應徵基礎的數據分析師,這些語法就很夠用了,之後更進階的語法,會以主題的方式,跟大家分享囉!

學習資源推薦

網路上的 SQL 學習資源很多,這裡會推薦我有使用過的 SQL 學習資源:

如何使用這個網站?我的數據分析文章導覽!

【1 對 1 免費諮詢】數據分析師 0~1 培訓班陪你一路到轉職成功!

hi 我是 Lisa

你也是 0 經驗、沒有相關背景,但也想要轉職數據分析師,或運用數據分析,提升在領域的專業度嗎?

-

你是否也覺得,數據分析的網路學習資源很多,但是多到不知道從哪裡開始?

學了很多工具,但學完了,問題才真正開始,不知道業界怎麼使用?又該如何面臨工作跟面試?

-

我在 2019 年從營運專員的職位轉職到數據分析師

在這之後,因為數據分析,也讓我快速建構不同領域的知識:行銷、營運、商業策略、產品、網頁

轉職過程中,花了很多時間成本摸索

我發現,學數據分析最快的方式是:

  1. 確認自己跟市場需求之間的差距:訂定轉職策略及了解數據分析師的工作方式
  2. 以業界應用的角度學習工具:包括數據工具及分析用思維架構,並且如何高效運用
  3. 建立一個商業上的真實專案,並且得到回饋:打造屬於你及貼合職缺需求的作品集和專案
  4. 打造一個高效履歷跟面談:透過高價值包裝術拿下面試、成功獲得數據行業的門票

當初如果我有這套系統思維,應該可以在短時間內轉職,馬上拿到進入業界的門票

-

現在,我想把這套完整課程分享給你

這是專門為了 0 經驗、沒有相關背景的轉職者所設計

不需要去考研究所、不需要花大錢準備出國讀書

可以用最快的時間準備轉職、拿到門票!

-

如果你正在準備轉職數據分析師,且試圖找過解決辦法卻始終治標不治本!歡迎跟我預約免費 1 對 1 諮詢,我會在諮詢時,了解你的需求並且評估我是否可以協助到你!

電子書 職場人必學的數據分析術

Lisa Wu

Hi 大家好!我是喜歡探索身心靈健康及平衡的數據分析師 Lisa Wu!這個網站會幫助你:利用數據分析 (理性) 及 身心靈平衡 (感性) 的系統,去達成人生目標!如果你對我的人生系統工具有興趣,歡迎聯繫我:couplehonest@gmail.com

This Post Has One Comment

Comments are closed.