CodeGym /課程 /SQL SELF /選擇特定欄位:根據欄位名稱提取資料

選擇特定欄位:根據欄位名稱提取資料

SQL SELF
等級 2 , 課堂 0
開放

當我們從資料庫撈資料時,很少會需要所有欄位。比如說,employees 這張員工表可能有 15 個欄位:名字、姓氏、生日、職稱、薪水、入職日期等等。但你可能只想知道他們的名字和職稱。全部撈出來其實沒什麼意義又沒效率。這時候,選擇特定欄位的技巧就派上用場啦。

打個比方,這就像你有一籃橘子、蘋果和香蕉,但你只想拿蘋果。是不是很酷?我們現在就來玩這個!

語法

提醒一下,SQL 設計得超 user-friendly。

首先,查詢語句的大小寫沒差。你可以寫 SELECTSelectselect,都 OK。再來,換行也不影響。DBMS 會自動把查詢變成一行,所以你想怎麼排版都行。

你大概也猜到了,SELECTFROM 只是開始。要不然 SQL 也不會這麼有話題。完整一點的 SQL 查詢長這樣:

SELECT 欄位
FROM 資料表
WHERE 條件
GROUP BY 欄位
HAVING 欄位
ORDER BY 排序

說明:

  • 欄位 — 你想要取得的欄位名稱。
  • 資料表 — 你要從哪個表撈資料。
  • 條件 — 用來篩選資料的條件。
  • 排序 — 排序的欄位和順序。

是不是很簡單?我們來看個實際例子。不過先從簡單的開始。

基本查詢範例

假設我們有一張 students 學生表,裡面有學生的資料。表結構可能長這樣:

id first_name last_name age grade
1 Alex Lin 20 A
2 Anna Song 22 B
3 Otto Art 19 A

現在我們只想知道所有學生的 last_namegrade

查詢會長這樣:

SELECT last_name, grade
FROM students;

執行結果:

last_name grade
Lin A
Song B
Art A

恭喜啦,你剛剛省下了資料庫資源,結果也更好讀!

字串合併

你已經會選資料了,來點有趣的吧。在我們的表裡,名字和姓氏是分開的。我們來寫個查詢,把學生的全名合併成一個欄位。

在 PostgreSQL 合併兩個字串用 ||。查詢會像這樣:

SELECT first_name || last_name, grade
FROM students;

執行結果:

first_name || last_name grade
AlexLin A
AnnaSong B
OttoArt A

嗯,好像少了點什麼。比如說名字和姓氏中間應該有個空格!我們來修正一下。

SELECT first_name || ' ' || last_name, grade
FROM students;

執行結果:

first_name || ' ' || last_name grade
Alex Lin A
Anna Song B
Otto Art A

這樣才對嘛。結果表的內容我很滿意,但標題怎麼變這樣?我想看到 full namename,而不是 first_name || ' ' || last_name。這樣又醜又不實用。其實有解法啦。

用 alias(別名)選欄位

用 alias 可以讓 SQL 查詢更好讀。就是在查詢裡給欄位取個新名字。用 AS 關鍵字(雖然可以省略,但建議還是寫上去,比較清楚)。

來看個例子:

SELECT first_name AS "名字", last_name AS "姓氏", grade AS "成績"
FROM students;

執行結果:

名字 姓氏 成績
Alex Lin A
Anna Song B
Otto Art A

這裡我們:

  1. 把欄位名稱改成中文,看起來更直觀。
  2. 在查詢裡用 AS 設定 alias。

如果你老闆或客戶要看資料又不想讓他們看得頭昏腦脹,alias 就是你的好朋友。

現在我們來優化一下全名的查詢。

SELECT first_name || ' ' || last_name  AS "全名", grade  AS "成績"
FROM students;

執行結果:

全名 成績
Alex Lin A
Anna Song B
Otto Art A

完美,這才是我們想要的。

為什麼只選部分欄位?

  1. 效能

想像一下你在處理一張有幾百萬筆、幾百個欄位的超大表。用 SELECT * 全部撈出來可能要等好幾分鐘甚至幾小時,還會吃掉一堆 server 資源。只撈你要的欄位就好啦。

  1. 可讀性

只撈你要的欄位,結果一目了然。否則結果就像週五晚上刷不完的新聞。

  1. 減少錯誤

查詢處理的資料越少,出錯的機率也越低。尤其你還要再處理這些資料時。

還要注意什麼?

資料表 alias

另一個對付長資料表名稱的方法,就是用資料表 alias。alias 最好跟原本的表名有點關聯,或至少看得出來是什麼。

SELECT sa05.first_name, sa05.course_id
FROM students_archive_2005 AS sa05

這招特別適合那種超長表名,比如 university_students_enrollments_records,你可以用 usrus 來簡化。

選特定欄位時常見錯誤

  1. 欄位名稱拼錯。如果你拼錯欄位名,會看到像這樣的錯誤訊息:ERROR: column "lastname" does not exist。記得檢查拼字!

  2. 欄位名稱衝突。多表查詢時,一定要標明是哪個表的欄位。例如 students.first_name

  3. SELECT * —— 這是新手陷阱。雖然很方便,但在大專案裡這是壞習慣!永遠只選你真的需要的欄位。

留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION