Logo

新人日誌

首頁關於我部落格

新人日誌

Logo

網站會不定期發佈技術筆記、職場心得相關的內容,歡迎關注本站!

網站
首頁關於我部落格
部落格
分類系列文

© 新人日誌. All rights reserved. 2020-present.

SQL SELECT 入門:理解「表單轉換」的核心觀念

最後更新:2026年1月17日資料庫

學會建立資料庫之後,接下來最重要的技能就是「把資料撈出來整理」。

這篇文章會帶你了解 SQL SELECT 的核心觀念,讓你知道它是怎麼幫你把一張表單轉換成另一張表單。

SELECT 的用途:把原始資料變成你要的結果

資料庫裡存的是「原始資料」,不是「計算好的結果」。

舉個例子,假設你有一張銷售紀錄的表單:

員工日期銷售金額
小明1/15000
小華1/13000
小明1/27000
小華1/24000
日期1/1
銷售金額5000
日期1/1
銷售金額3000
日期1/2
銷售金額7000
日期1/2
銷售金額4000

這就是「原始資料」——一筆一筆的銷售紀錄。

但日常工作中,老闆常常需要的是結果:

  • 「目前業績的最大值是多少?」→ 答案是 7000
  • 「小明的銷售總額是多少?」→ 答案是 12000

這些答案不會直接躺在資料庫裡等你。

你需要用 SELECT 把原始資料撈出來,做計算、做整理,才能產出老闆要的結果。

這就是為什麼 SELECT 是資料庫最實用的技能。

但實用歸實用,SELECT 也是 CRUD 裡面最難的一塊。

Create、Update、Delete 都相對單純——新增一筆資料、改一個欄位、刪掉某幾列,做完就結束了。

但讀取(Read)不一樣。

它不只是把資料拿出來,還要做篩選、排序、分組、計算,最後整理成你要的格式。

不過別擔心,這一章我們會先在「單一表單」內練習,還不會跨到多個表單的複雜操作。

等你熟悉單一表單的操作之後,再學跨表單的操作會更容易上手。

SQL SELECT 的核心觀念:輸入輸出都是表單

學 SELECT 之前,有一個觀念一定要先建立。

舉個例子,假設你想從前面的銷售紀錄表單,算出「每個員工的銷售總額」。

SELECT 會幫你把這張表單:

員工日期銷售金額
小明1/15000
小華1/13000
小明1/27000
小華1/24000
日期1/1
銷售金額5000
日期1/1
銷售金額3000
日期1/2
銷售金額7000
日期1/2
銷售金額4000

轉換成這張表單:

員工銷售總額
小明12000
小華7000
銷售總額12000
銷售總額7000

輸入是 4 筆資料,輸出變成 2 筆資料,欄位也從 3 個變成 2 個。

所以你可以這樣理解:SELECT 的本質不是「查找」,而是把一張表單轉換成另一張表單。

這就像是一條生產線,資料從一張表單轉換成另一張表單,一路轉下去,直到變成你要的結果。

這個「表單轉表單」的概念,在實務上可以這樣應用:把一個 SELECT 的結果,當成另一個 SELECT 的輸入。

這種寫法叫做「子查詢(Sub Query)」。

什麼是子查詢(Sub Query)?

子查詢的做法是把 SELECT 的結果丟進 FROM 裡面,再做一次 SELECT。

延續前面的例子,假設老闆問你:「銷售總額超過 10000 的員工有誰?」

你可以分兩步驟來做:

第一步:先算出每個員工的銷售總額

SELECT 員工, SUM(銷售金額) AS 銷售總額
FROM 銷售紀錄
GROUP BY 員工

這個 SELECT 會把原始的銷售紀錄:

員工日期銷售金額
小明1/15000
小華1/13000
小明1/27000
小華1/24000
日期1/1
銷售金額5000
日期1/1
銷售金額3000
日期1/2
銷售金額7000
日期1/2
銷售金額4000

轉換成:

員工銷售總額
小明12000
小華7000
銷售總額12000
銷售總額7000

第二步:從這張表單中,篩選出銷售總額超過 10000 的人

SELECT *
FROM (
    SELECT 員工, SUM(銷售金額) AS 銷售總額
    FROM 銷售紀錄
    GROUP BY 員工
) AS 員工銷售總額
WHERE 銷售總額 > 10000

最後得到:

員工銷售總額
小明12000
銷售總額12000

內層的 SELECT 產出一張虛擬表單,外層的 SELECT 再從這張表單篩選資料。

這就是「表單轉表單」的實際應用。

為什麼要幫 SELECT 結果取別名(Alias)?

你可能注意到了,上面的例子有一段 AS 員工銷售總額。

這就是幫 SELECT 結果取一個「別名(Alias)」。

為什麼要這樣做?

因為輸出的結果還是一張表單,它具備表單該有的東西:

  • 欄位(Column)
  • 資料(Row)

很多人會忘記這一點,寫出這樣的程式碼:

SELECT *
FROM (
    SELECT 員工, SUM(銷售金額)
    FROM 銷售紀錄
    GROUP BY 員工
)
WHERE ??? > 10000

問題來了:SUM(銷售金額) 沒有名字,外層的 SELECT 要怎麼指定它?

所以建議你:給輸出的欄位和表單取一個好懂的別名。

這樣做有兩個好處:

  1. 之後再做 SELECT 時,程式碼更容易讀懂
  2. 有些情況下,SQL 會強制要求你給別名

SELECT 的設計理念與 Functional Programming

如果你學過程式設計,可能聽過「Functional Programming(函數式程式設計)」。

SQL SELECT 的設計理念其實跟它很像。

回顧一下前面的子查詢例子:

  1. 第一個 SELECT:把「銷售紀錄」轉換成「員工銷售總額」
  2. 第二個 SELECT:把「員工銷售總額」轉換成「銷售超過 10000 的員工」

每一步的輸入都是一張表單,輸出也是一張表單。

這種設計有幾個特點:

  • 輸入和輸出的格式相同:都是表單,所以可以互相串接
  • 可以把輸出再丟回去當輸入:上一步的結果,變成下一步的材料
  • 可以一路串接下去:需要幾步就串幾步,直到得到你要的結果

Functional Programming 的核心理念也是這樣:函數的輸出可以直接當成另一個函數的輸入,一路串下去。

這種設計的好處是,你可以把複雜的問題拆成一個個小步驟,每一步只做一件事,最後組合起來就是完整的解答。

不熟悉 Functional Programming 也沒關係,只要記住「表單進、表單出」這個核心觀念就夠了。

小結

這篇文章介紹了 SQL SELECT 的核心觀念:

  1. 資料整理很重要:因為資料庫只存原始資料,計算結果需要用 SELECT 來產生
  2. SELECT 是表單到表單的轉換:輸入是表單,輸出也是表單
  3. 輸出可以再當輸入:這就是子查詢(Sub Query)的概念
  4. 給欄位取別名是好習慣:讓之後的 SELECT 更容易維護

掌握這些觀念之後,你就有了正確的思考框架,接下來學習具體的 SQL 語法會更容易上手。

目前還沒有留言,成為第一個留言的人吧!

發表留言

留言將在審核後顯示。

資料庫

目錄

  • SELECT 的用途:把原始資料變成你要的結果
  • SQL SELECT 的核心觀念:輸入輸出都是表單
  • 什麼是子查詢(Sub Query)?
  • 為什麼要幫 SELECT 結果取別名(Alias)?
  • SELECT 的設計理念與 Functional Programming
  • 小結