SQL語法基礎教學:一步步帶你實作資料查詢

作者:帆軟行業化團隊

2025年6月24日 · 18 min read

來源:帆軟

學會sql語法能讓使用者快速查詢、整理與分析資料。許多書籍實際示範如何利用PostgreSQL和pgAdmin建立資料庫,並匯入真實世界的統計資料。這些內容涵蓋基礎語法、統計函式、資料表設計與資料清理技巧。初學者只需勇於嘗試,便能有效提升資料分析能力。

一、SQL語法簡介

SQL定義

SQL(Structured Query Language,結構化查詢語言)是一種專為資料庫管理而設計的標準語言。自1970年由IBM開發以來,SQL已成為資料庫領域的主流語言。根據統計,超過半數的開發者選擇使用SQL進行資料處理。SQL不僅具備資料定義、資料操作、資料控制及交易控制等多種功能,還被多個國際標準組織採納,包括ANSI與ISO標準。1979年,甲骨文公司首次將SQL商用,隨後IBM也將其應用於自家資料庫系統。1986年,美國ANSI正式將SQL納入關聯式資料庫管理系統的標準語言,並由國際標準化組織(ISO)採納為國際標準。SQL標準持續更新,確保不同資料庫系統間的相容性與一致性。開源資料庫如MySQL與PostgreSQL的普及,進一步推動SQL的廣泛應用。

主要功能

SQL語法主要用於資料的新增、查詢、更新與刪除。這些功能讓使用者能夠靈活管理大量資料。SQL也支援資料的分類、彙總與統計,特別是在資料分析領域中扮演重要角色。例如,GROUP BY子句可搭配SUM、AVG、COUNT等彙總函數,將資料依分類進行統計彙整,計算同一分類下的數值結果。這些功能的執行速度通常優於傳統試算表軟體。

語法結構

SQL語法結構設計簡潔,類似英文句子,容易理解。每一條SQL指令通常由動詞開頭,後接目標資料表與條件。例如,查詢語法以SELECT開頭,新增資料則以INSERT INTO開頭。這種結構讓初學者能快速上手,並能被多種資料庫系統(如MySQL、PostgreSQL、SQL Server等)解析與執行。

SELECT 欄位名稱 FROM 資料表名稱 WHERE 條件;

這個範例展示了SQL查詢語法的基本結構。使用者只需依照語法規則撰寫指令,即可完成複雜的資料查詢與分析。

二、SQL語法操作

SQL語法的核心在於四大基本操作:新增(INSERT)、查詢(SELECT)、更新(UPDATE)與刪除(DELETE)。這些操作讓使用者能夠有效管理資料庫中的資料。根據日常應用經驗,CREATE TABLE等語法在日常操作中較常見,而CREATE DATABASE則多用於初始化階段。

新增資料

新增資料時,使用者會用INSERT INTO語法。這個語法能將新的資料列加入指定的資料表。語法結構如下:

INSERT INTO 資料表名稱 (欄位1, 欄位2, ...) VALUES (值1, 值2, ...);

舉例來說,若有一個名為students的資料表,包含name與age欄位,新增一筆資料的語法如下:

INSERT INTO students (name, age) VALUES ('小明', 18);

這個指令會將「小明」與18這兩個值新增到students資料表中。INSERT語法簡單明瞭,適合初學者快速上手。

查詢資料

查詢資料是SQL語法中最常見的操作。使用者會用SELECT語法從資料表中擷取所需資料。基本語法如下:

SELECT 欄位名稱 FROM 資料表名稱 WHERE 條件;

如果想查詢students資料表中所有學生的姓名與年齡,可以這樣寫:

SELECT name, age FROM students;

若只想查詢年齡大於18歲的學生,則可加入WHERE條件:

SELECT name, age FROM students WHERE age > 18;

查詢語法彈性高,能依需求調整查詢條件。多數資料分析與報表產生都會以SELECT語法為基礎。

更新資料

當資料需要修改時,使用者會用UPDATE語法。這個語法能根據條件更新指定資料列的內容。語法結構如下:

UPDATE 資料表名稱 SET 欄位1=新值1, 欄位2=新值2 WHERE 條件;

假設要將students資料表中「小明」的年齡改為19歲,可以這樣寫:

UPDATE students SET age = 19 WHERE name = '小明';

UPDATE語法必須搭配WHERE條件,否則會更新整個資料表的所有資料。這點需要特別注意,以免誤改大量資料。

刪除資料

在資料庫管理過程中,刪除不需要的資料是一項重要任務。使用者可以透過DELETE語法,將指定條件下的資料列從資料表中移除。這個操作有助於維護資料的正確性與整潔度。DELETE屬於sql語法的四大基本操作之一,與INSERT、SELECT、UPDATE同等重要。

DELETE語法的基本結構如下:

DELETE FROM 資料表名稱 WHERE 條件;

舉例來說,若要從students資料表中刪除名為「小明」的學生資料,可以這樣撰寫:

DELETE FROM students WHERE name = '小明';

這個指令會將所有name欄位為「小明」的資料列移除。若資料表中有多筆符合條件的資料,系統會一併刪除。

刪除資料時,建議先以SELECT語法檢查條件,確保只刪除目標資料。這樣能降低誤刪風險,提升資料安全性。

三、SQL查詢語法

SELECT與FROM

SQL查詢的基礎在於SELECT與FROM子句。SELECT子句負責指定要查詢的欄位,FROM子句則決定數據的來源資料表。這兩個子句構成查詢語法的核心,任何查詢都離不開這個結構。

  • FROM子句在查詢邏輯處理中屬於第一步,負責明確指定數據來源的表格或視圖。這個步驟確保後續的查詢條件與欄位選擇都能正確引用資料。
  • SELECT子句在邏輯處理順序中位於第八步,主要用來選取需要顯示的欄位或運算結果。
  • 若缺少FROM子句,查詢將無法取得任何資料,SELECT子句也無法發揮作用。
  • 查詢處理器會依據這個邏輯順序執行語句,顯示FROM與SELECT子句在查詢中扮演不可或缺的角色。

範例:

SELECT name, age FROM students;

這個查詢會從students資料表中,選取所有學生的姓名與年齡。

WHERE條件

WHERE子句用於設定查詢的篩選條件。透過WHERE,使用者可以只取得符合特定條件的資料列,提升查詢的精確度與效率。WHERE子句常見於各種sql語法中,尤其在資料量龐大時,能有效縮小查詢範圍。

常見的WHERE條件運算符包括:

  • 等於(=)
  • 大於(>)
  • 小於(<)
  • 不等於(<> 或 !=)
  • 介於(BETWEEN ... AND ...)
  • 包含於(IN (...))
  • 模糊比對(LIKE)

範例:

SELECT name, age FROM students WHERE age > 18;

這個查詢會找出年齡大於18歲的學生。

ORDER BY排序

ORDER BY子句用於對查詢結果進行排序。使用者可指定一個或多個欄位,並決定排序方式(升冪ASC或降冪DESC)。這個功能有助於資料分析與報表製作,讓結果更有條理。

範例:

SELECT name, age FROM students WHERE age > 18 ORDER BY age DESC;

這個查詢會找出年齡大於18歲的學生,並依年齡由大到小排序。

常見排序方式:

  • 升冪排序(ASC):由小到大,預設值。
  • 降冪排序(DESC):由大到小。

GROUP BY分組

GROUP BY子句能將資料依照指定欄位進行分組。這個功能在資料分析時非常重要。使用者可以針對每個分組計算統計值,例如總數、平均值、最大值或最小值。GROUP BY常與彙總函數一起使用,能快速產生分組統計報表。

常見的彙總函數包括:

  • COUNT:計算每組的資料筆數
  • SUM:計算每組的總和
  • AVG:計算每組的平均值
  • MAX:找出每組的最大值
  • MIN:找出每組的最小值

舉例來說,假設有一個students資料表,包含name、age與class欄位。若想知道每個班級的學生人數,可以這樣寫:

SELECT class, COUNT(*) AS student_count
FROM students
GROUP BY class;

這個查詢會將資料依照class欄位分組,並計算每個班級的學生總數。GROUP BY子句必須放在WHERE之後、ORDER BY之前。彙總函數只能搭配GROUP BY使用,否則系統會出現錯誤訊息。

GROUP BY也能搭配多個欄位進行複合分組。例如,若想知道每個班級、每個年齡層的學生人數,可以這樣寫:

SELECT class, age, COUNT(*) AS student_count
FROM students
GROUP BY class, age;

這個查詢會先依class分組,再依age細分,產生更細緻的統計結果。GROUP BY的彈性很高,適合用於各種資料分析情境。

LIMIT限制

LIMIT子句能限制查詢結果的筆數。這個功能在資料量龐大時特別實用。使用者可以只取出前幾筆資料,避免一次顯示過多內容。LIMIT通常搭配ORDER BY使用,能取得排名前幾名的資料。

範例:

SELECT name, age
FROM students
ORDER BY age DESC
LIMIT 5;

這個查詢會找出年齡最大的前五位學生。LIMIT語法簡單,能有效提升查詢效率。部分資料庫(如MySQL、PostgreSQL)支援LIMIT,SQL Server則使用TOP或OFFSET FETCH語法達到相同效果。

sql語法的LIMIT子句能讓查詢更靈活,適合各種資料展示需求。

四、SQL查詢練習

基本查詢

基本查詢是學習SQL的第一步。使用者可以透過SELECT語法,從資料表中擷取所需欄位。這個操作適合初學者熟悉資料表結構與欄位名稱。舉例來說,若有一個students資料表,包含name與age欄位,可以這樣查詢:

SELECT name, age FROM students;

這個語法會顯示所有學生的姓名與年齡。若想查詢所有欄位,可以使用星號(*):

SELECT * FROM students;

這樣會列出students資料表的全部欄位與資料。基本查詢能幫助使用者快速檢視資料內容,建立對資料表的初步認識。

條件查詢

條件查詢能讓使用者只取得符合特定條件的資料列。WHERE子句是條件查詢的核心。舉例來說,若想找出年齡大於18歲的學生,可以這樣寫:

SELECT name, age FROM students WHERE age > 18;

這個查詢只會顯示年齡超過18歲的學生。WHERE子句支援多種運算符,例如:

  • 等於(=)
  • 大於(>)
  • 小於(<)
  • 不等於(<> 或 !=)

也可以結合多個條件:

SELECT name, age FROM students WHERE age > 18 AND name = '小明';

這個語法會找出年齡大於18歲且姓名為小明的學生。

排序查詢

排序查詢能讓查詢結果依指定欄位排序。ORDER BY子句用於設定排序欄位與方式。舉例來說,若想依年齡由大到小排列學生資料,可以這樣寫:

SELECT name, age FROM students ORDER BY age DESC;

這個查詢會將學生依年齡從大到小排序。若想由小到大排序,可以省略DESC或加上ASC:

SELECT name, age FROM students ORDER BY age ASC;

ORDER BY也能同時排序多個欄位。例如,先依班級排序,再依年齡排序:

SELECT name, age, class FROM students ORDER BY class, age;

分組統計

在資料分析過程中,分組統計扮演關鍵角色。GROUP BY子句能將資料依照指定欄位分組,並結合彙總函數進行統計。這種查詢方式適合用來計算每個分類的總數、平均值或其他統計資訊。

常見的彙總函數包括:

  • COUNT():計算每組資料的筆數
  • SUM():計算每組數值欄位的總和
  • AVG():計算每組的平均值
  • MAX():找出每組的最大值
  • MIN():找出每組的最小值

舉例來說,假設有一個students資料表,包含class(班級)與age(年齡)欄位。若要統計每個班級的學生人數,可以這樣撰寫:

SELECT class, COUNT(*) AS student_count
FROM students
GROUP BY class;

這個查詢會將資料依class分組,並計算每個班級的學生總數。GROUP BY子句必須放在WHERE之後、ORDER BY之前。若要進一步統計每個班級的平均年齡,可以使用AVG函數:

SELECT class, AVG(age) AS avg_age
FROM students
GROUP BY class;

分組統計能協助使用者快速掌握資料分布狀況。建議讀者多嘗試不同的GROUP BY組合,熟悉各種統計需求。透過實作練習,能有效提升資料分析能力。

五、SQL進階查詢

多表JOIN

在資料庫應用中,資料常分散於多個資料表。JOIN語法能將不同資料表的資料結合,讓查詢結果更完整。最常見的JOIN類型有INNER JOIN與LEFT JOIN。

  • INNER JOIN:只顯示兩個資料表中符合條件的資料列。
  • LEFT JOIN:顯示左側資料表的所有資料列,右側資料表若無對應資料則以NULL補足。

舉例來說,假設有students與classes兩個資料表。students表有class_id欄位,classes表有id與class_name欄位。若要查詢每位學生的姓名與所屬班級名稱,可以這樣寫:

SELECT students.name, classes.class_name
FROM students
INNER JOIN classes ON students.class_id = classes.id;

這個查詢會將兩個資料表依class_id與id欄位連接,顯示學生姓名與班級名稱。JOIN語法讓跨表查詢變得簡單,適合用於資料整合與分析。

常用函數

SQL查詢常搭配各種函數,提升資料處理效率。聚合函數(Aggregate Functions)能對多筆資料進行統計運算。以下為常見聚合函數:

函數名稱功能說明範例用法
COUNT計算資料筆數COUNT(*)
SUM計算數值總和SUM(age)
AVG計算平均值AVG(score)
MAX取得最大值MAX(age)
MIN取得最小值MIN(score)

舉例來說,若要統計students資料表的學生總數與年齡平均值,可以這樣寫:

SELECT COUNT(*) AS total_students, AVG(age) AS avg_age
FROM students;

這個查詢會顯示學生總人數與平均年齡。聚合函數常與GROUP BY搭配,進行分組統計。這些函數能協助使用者快速完成資料彙總與分析。

註解語法

在撰寫SQL查詢時,註解能提升程式碼可讀性。SQL支援單行註解與多行註解。最常用的單行註解語法為「--」,系統會忽略該行「--」後的內容。

SELECT name, age FROM students; -- 查詢所有學生的姓名與年齡

多行註解則使用「/* ... */」包住註解內容。

/*
這是一段多行註解
可用於說明複雜查詢邏輯
*/
SELECT * FROM students;

良好的註解習慣有助於團隊協作與維護。建議每次撰寫複雜查詢時,適當加上註解,說明查詢目的與邏輯。

線上資源

練習平台

學習SQL語法時,選擇合適的線上練習平台能大幅提升學習效率。許多平台提供即時練習環境,讓使用者不需安裝軟體即可操作SQL指令。這些平台適合初學者反覆練習,逐步建立自信。

  • SQLZoo 提供互動式題目,適合從基礎到進階逐步練習。
  • LeetCode 針對資料庫查詢設計多樣化題庫,適合挑戰自我。
  • W3Schools SQL Tryit Editor 讓學習者即時撰寫與執行SQL語法。
  • HackerRank SQL 提供主題式練習與解題討論。

進階學習

當學習者熟悉基本語法後,進階課程與資源能協助他們深化資料分析能力。進階學習不僅強化技術,更培養解決問題的能力。根據學習教練團隊的追蹤,導入即時協助機制後,學員的作業完成率明顯提升,基礎能力更加穩固。質化分析也指出,進階課程的挑戰主要來自學習心態與期望設定,而非內容本身。

  • 觀摩助教解題能幫助學習者突破瓶頸。
  • 調整學習心態有助於克服挫折,提升延伸技能。
  • 參與線上社群討論,能獲得更多實戰經驗。

學會SQL語法後,他能在資料分析、工程師、商業分析等領域發揮關鍵作用。根據資料庫管理師職缺需求預測,2019年至2029年,相關人才需求每年成長約10%。持續練習SQL查詢,能幫助他解決技術問題、適應複雜環境,並提升團隊溝通能力。建議讀者持續練習,勇於挑戰進階查詢,逐步累積資料分析實力。

帆軟產品免費試用

企業戰情室報表軟體

企業戰情室報表軟體

複雜報表/戰情室/資料填報/數位孿生

企業商業智慧BI軟體

企業商業智慧BI軟體

自助資料處理/Dashboard/探索分析

一站式資料整合平台

一站式資料整合平台

資料同步/ETL資料開發/API資料服務

免費資源下載

×

立即下載

姓名

郵箱

公司完整名稱

管道了解

-- 您是怎麽瞭解的我們 --

網路搜尋
Facebook臉書
媒體/部落格/論壇
YouTube
電子報
線下展會
線下課程
他人推薦
其他

職位

-- 選擇您的職稱 --

IT資訊&數據部門
一般部門
管理/ 決策者
老師
學生
其他

是否有報表/BI/數位建設需求?

-- 請選擇 --

沒有
不確定

手機號碼

SMS 驗證碼

×

立即下載

姓名

郵箱

公司完整名稱

管道了解

-- 您是怎麽瞭解的我們 --

網路搜尋
Facebook臉書
媒體/部落格/論壇
YouTube
電子報
線下展會
線下課程
他人推薦
其他

職位

-- 選擇您的職稱 --

IT資訊&數據部門
一般部門
管理/ 決策者
老師
學生
其他

是否有報表/BI/數位建設需求?

-- 請選擇 --

沒有
不確定

手機號碼

SMS 驗證碼

×

立即下載

姓名

郵箱

公司完整名稱

管道了解

-- 您是怎麽瞭解的我們 --

網路搜尋
Facebook臉書
媒體/部落格/論壇
YouTube
電子報
線下展會
線下課程
他人推薦
其他

職位

-- 選擇您的職稱 --

IT資訊&數據部門
一般部門
管理/ 決策者
老師
學生
其他

是否有報表/BI/數位建設需求?

-- 請選擇 --

沒有
不確定

手機號碼

SMS 驗證碼

×

立即下載

姓名

郵箱

公司完整名稱

管道了解

-- 您是怎麽瞭解的我們 --

網路搜尋
Facebook臉書
媒體/部落格/論壇
YouTube
電子報
線下展會
線下課程
他人推薦
其他

職位

-- 選擇您的職稱 --

IT資訊&數據部門
一般部門
管理/ 決策者
老師
學生
其他

是否有報表/BI/數位建設需求?

-- 請選擇 --

沒有
不確定

手機號碼

SMS 驗證碼

×

立即下載

姓名

郵箱

公司完整名稱

管道了解

-- 您是怎麽瞭解的我們 --

網路搜尋
Facebook臉書
媒體/部落格/論壇
YouTube
電子報
線下展會
線下課程
他人推薦
其他

職位

-- 選擇您的職稱 --

IT資訊&數據部門
一般部門
管理/ 決策者
老師
學生
其他

是否有報表/BI/數位建設需求?

-- 請選擇 --

沒有
不確定

手機號碼

SMS 驗證碼

×

立即下載

姓名

郵箱

公司完整名稱

管道了解

-- 您是怎麽瞭解的我們 --

網路搜尋
Facebook臉書
媒體/部落格/論壇
YouTube
電子報
線下展會
線下課程
他人推薦
其他

職位

-- 選擇您的職稱 --

IT資訊&數據部門
一般部門
管理/ 決策者
老師
學生
其他

是否有報表/BI/數位建設需求?

-- 請選擇 --

沒有
不確定

手機號碼

SMS 驗證碼

我們很樂意傾聽你的需求,解答您的疑問,並提供專業建議, 助力您的企業實現智慧轉型!

×

意見回饋

姓名

電郵

公司

國家/地區

-- select an option --

電話

投訴原因

請選擇投訴原因

代理商問題
產品問題
技術支援服務問題
專案問題
銷售問題
商務問題
行銷問題
其他

投訴內容