返回首頁SQL

SQL 完整指南:從入門到精通的資料庫查詢語言教學【2025最新】

26 min 分鐘閱讀
#SQL#資料庫#SQL語法#SQL教學#SQL Server#MySQL#PostgreSQL#資料查詢#後端開發#資料分析

SQL 完整指南:從入門到精通的資料庫查詢語言教學【2025最新】

引言:資料驅動時代的 SQL 重要性

每天有超過 25 億筆資料在全球企業的資料庫中被查詢、新增、修改。這些操作背後,幾乎都離不開一個關鍵技術:SQL。

無論你是想轉職資料分析師、成為後端工程師,還是單純想提升工作效率,學會 SQL 都是最值得投資的技能之一。根據 LinkedIn 2024 年報告,SQL 連續五年蟬聯最受企業歡迎的技術技能前三名。

這篇文章將帶你從零開始,完整掌握 SQL 的核心概念與實戰技巧。

插圖 1:資料庫管理員查看 SQL 查詢結果畫面

SQL 是什麼?

基本定義與歷史

SQL(Structured Query Language,結構化查詢語言)是用來與關聯式資料庫溝通的標準語言。

簡單來說,SQL 就像是你和資料庫之間的「翻譯官」。你用 SQL 下指令,資料庫就會照做。

SQL 誕生於 1970 年代的 IBM 研究實驗室。1986 年,ANSI(美國國家標準協會)將 SQL 定為標準語言。至今,幾乎所有主流資料庫都支援 SQL。

SQL 可以做什麼

SQL 的應用範圍非常廣泛:

  • 查詢資料:從百萬筆資料中快速找出你要的資訊
  • 新增資料:將新的紀錄寫入資料庫
  • 更新資料:修改現有的資料內容
  • 刪除資料:移除不需要的資料
  • 建立資料表:設計資料庫的結構
  • 設定權限:控制誰可以存取哪些資料

舉個實際例子:電商平台每秒處理上千筆訂單查詢,背後都是 SQL 在運作。

SQL 與 MySQL 的差別

這是初學者最常搞混的問題。

SQL 是一種「語言」,就像英文、中文一樣。 MySQL 是一種「資料庫軟體」,就像 Word、Excel 是軟體一樣。

其他常見的資料庫軟體還有:

  • PostgreSQL:功能強大的開源資料庫
  • SQL Server:微軟開發的企業級資料庫
  • Oracle Database:大型企業愛用的商業資料庫
  • SQLite:輕量級的嵌入式資料庫

這些資料庫都使用 SQL 語言,但各自有一些語法差異。學好標準 SQL 後,轉換到任何資料庫都不難。

想深入了解各資料庫的差異,可以參考 SQL vs NoSQL 完整比較指南


SQL 環境建置

主流資料庫介紹

選擇哪個資料庫取決於你的需求:

資料庫適用場景授權方式學習難度
MySQL網站開發、中小型專案開源免費
PostgreSQL複雜查詢、地理資訊系統開源免費
SQL Server企業應用、.NET 開發商業授權(有免費版)
Oracle大型企業、金融系統商業授權
SQLite行動 App、嵌入式系統公共領域

對於初學者,建議從 SQL Server ExpressMySQL 開始。

SQL Server 安裝快速指南

SQL Server Express 是微軟提供的免費版本,非常適合學習和小型專案。

系統需求:

  • Windows 10/11 或 Windows Server
  • 至少 6GB 硬碟空間
  • 最少 1GB RAM(建議 4GB 以上)

安裝步驟:

  1. 前往微軟官網下載 SQL Server 2022 Express
  2. 選擇「基本」安裝類型
  3. 接受授權條款
  4. 選擇安裝位置
  5. 等待安裝完成(約 10-15 分鐘)

安裝完成後,還需要下載 SQL Server Management Studio (SSMS) 作為管理工具。

完整的安裝教學請參考 SQL Server Express 完整安裝指南

線上練習環境

如果不想在本機安裝,可以使用線上練習平台:

  • SQLZoo:互動式教學,適合完全新手
  • W3Schools SQL:語法參考與線上測試
  • LeetCode SQL:刷題練習,適合求職準備
  • HackerRank SQL:進階挑戰題

這些平台都提供即時執行環境,輸入 SQL 就能看到結果。

更多學習資源整理請看 SQL 自學完整指南


SQL 基礎語法教學

SELECT 查詢基礎

SELECT 是 SQL 最常用的指令,用來從資料表中擷取資料。

基本語法:

SELECT 欄位名稱
FROM 資料表名稱;

實際範例:

-- 查詢所有員工的姓名和薪資
SELECT name, salary
FROM employees;

-- 查詢所有欄位
SELECT *
FROM employees;

使用 SELECT * 會回傳所有欄位,但在正式環境中應該明確指定需要的欄位,避免效能問題。

WHERE 條件篩選

WHERE 子句用來篩選符合條件的資料。

常用比較運算子:

運算子說明範例
=等於salary = 50000
<> 或 !=不等於status <> 'inactive'
>大於age > 30
<小於price < 1000
>=大於等於quantity >= 10
<=小於等於score <= 60
BETWEEN範圍內age BETWEEN 20 AND 30
IN在列表中city IN ('台北', '台中')
LIKE模糊比對name LIKE '王%'
IS NULL空值判斷email IS NULL

實際範例:

-- 查詢薪資超過 50000 的員工
SELECT name, salary
FROM employees
WHERE salary > 50000;

-- 查詢台北或台中的客戶
SELECT *
FROM customers
WHERE city IN ('台北', '台中');

-- 查詢姓王的員工
SELECT *
FROM employees
WHERE name LIKE '王%';

聚合函數與 GROUP BY

聚合函數用來對一組資料進行計算,常與 GROUP BY 搭配使用。

五大聚合函數:

函數功能範例
COUNT()計算筆數COUNT(*)
SUM()加總SUM(salary)
AVG()平均值AVG(score)
MAX()最大值MAX(price)
MIN()最小值MIN(age)

GROUP BY 分組統計:

-- 計算各部門的員工人數和平均薪資
SELECT department,
       COUNT(*) AS employee_count,
       AVG(salary) AS avg_salary
FROM employees
GROUP BY department;

HAVING 過濾分組結果:

-- 找出員工人數超過 10 人的部門
SELECT department, COUNT(*) AS employee_count
FROM employees
GROUP BY department
HAVING COUNT(*) > 10;

注意:WHERE 在分組前篩選,HAVING 在分組後篩選。

想學習更多基礎語法,請參考 SQL 語法大全完整教學

插圖 2:SQL 查詢語法結構圖解

SQL 進階查詢技巧

JOIN 多表連接

實際應用中,資料通常分散在多個資料表。JOIN 讓你能夠合併這些資料。

四種主要 JOIN 類型:

JOIN 類型說明
INNER JOIN只回傳兩邊都有匹配的資料
LEFT JOIN回傳左表所有資料,右表沒匹配則顯示 NULL
RIGHT JOIN回傳右表所有資料,左表沒匹配則顯示 NULL
FULL OUTER JOIN回傳兩邊所有資料,沒匹配則顯示 NULL

INNER JOIN 範例:

-- 查詢訂單與客戶資訊
SELECT orders.order_id,
       customers.name,
       orders.total_amount
FROM orders
INNER JOIN customers ON orders.customer_id = customers.id;

LEFT JOIN 範例:

-- 查詢所有客戶及其訂單(包含沒有訂單的客戶)
SELECT customers.name,
       orders.order_id
FROM customers
LEFT JOIN orders ON customers.id = orders.customer_id;

完整的 JOIN 圖解教學請參考 SQL JOIN 完整教學指南

子查詢 Subquery

子查詢是嵌套在另一個查詢內的 SELECT 語句。

WHERE 子查詢:

-- 找出薪資高於平均的員工
SELECT name, salary
FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);

FROM 子查詢(衍生表):

-- 計算各部門的薪資排名
SELECT department, avg_salary
FROM (
    SELECT department, AVG(salary) AS avg_salary
    FROM employees
    GROUP BY department
) AS dept_salaries
WHERE avg_salary > 50000;

子查詢很強大,但過度使用會影響效能。進階用法請參考 SQL 子查詢實戰教學

CTE 與視窗函數

CTE(Common Table Expression) 讓複雜查詢更易讀:

WITH high_salary_employees AS (
    SELECT *
    FROM employees
    WHERE salary > 80000
)
SELECT department, COUNT(*) AS count
FROM high_salary_employees
GROUP BY department;

視窗函數可在不改變資料列數的情況下進行計算:

-- 計算每個員工在部門內的薪資排名
SELECT name,
       department,
       salary,
       RANK() OVER (PARTITION BY department ORDER BY salary DESC) AS salary_rank
FROM employees;

視窗函數是進階 SQL 的重要技能,詳細教學請看 SQL Window Functions 完整教學


資料操作語法(DML)

INSERT 新增資料

-- 新增單筆資料
INSERT INTO employees (name, department, salary)
VALUES ('王小明', '行銷部', 55000);

-- 批量新增
INSERT INTO employees (name, department, salary)
VALUES
    ('李小華', '工程部', 70000),
    ('張大偉', '人資部', 48000),
    ('陳美玲', '財務部', 62000);

UPDATE 更新資料

-- 更新特定員工的薪資
UPDATE employees
SET salary = 60000
WHERE name = '王小明';

-- 批量調薪 5%
UPDATE employees
SET salary = salary * 1.05
WHERE department = '工程部';

重要提醒:UPDATE 一定要加 WHERE 條件,否則會更新所有資料。

DELETE 刪除資料

-- 刪除離職員工資料
DELETE FROM employees
WHERE status = 'resigned';

DELETE vs TRUNCATE:

特性DELETETRUNCATE
可加條件否(刪除全部)
可回滾否(多數資料庫)
速度較慢較快
觸發器會觸發不會觸發

完整的 CRUD 操作教學請參考 SQL CRUD 操作完整指南


資料庫結構管理(DDL)

CREATE TABLE 建立資料表

CREATE TABLE products (
    id INT PRIMARY KEY IDENTITY(1,1),
    name NVARCHAR(100) NOT NULL,
    price DECIMAL(10,2) NOT NULL,
    category NVARCHAR(50),
    created_at DATETIME DEFAULT GETDATE()
);

常用資料型別:

類型說明範例
INT整數年齡、數量
DECIMAL(p,s)精確小數金額、價格
VARCHAR(n)可變長度字串英文名稱
NVARCHAR(n)Unicode 字串中文名稱
DATE日期生日
DATETIME日期時間訂單時間
BIT布林值是否啟用

索引與效能

索引就像書本的目錄,能大幅加快查詢速度。

-- 建立索引
CREATE INDEX idx_employees_department
ON employees (department);

-- 建立唯一索引
CREATE UNIQUE INDEX idx_employees_email
ON employees (email);

何時該建索引:

  • WHERE 條件常用的欄位
  • JOIN 的關聯欄位
  • ORDER BY 排序欄位

何時不該建索引:

  • 資料量很小的表
  • 頻繁更新的欄位
  • 值重複度很高的欄位

索引策略是效能優化的關鍵,詳見 SQL 效能優化完整指南


需要資料庫架構設計協助?

根據 Gartner 調查,70% 的資料庫效能問題源自於不良的架構設計。專業的資料庫規劃可以讓查詢速度提升 10 倍以上。

CloudInsight 如何幫助您?

  • 資料庫架構評估:分析現有架構的瓶頸與改善空間
  • 效能調校服務:找出慢查詢並提供優化建議
  • 索引策略規劃:設計最佳化的索引配置
  • 遷移規劃諮詢:地端到雲端的資料庫遷移評估

為什麼選擇 CloudInsight?

  • 10+ 年企業資料庫顧問經驗
  • 服務超過 500 家企業客戶
  • 熟悉 SQL Server、MySQL、PostgreSQL 等主流資料庫

👉 預約免費資料庫架構諮詢,讓專家幫你找出優化空間


SQL 進階應用

預存程序 Stored Procedure

預存程序是預先編譯的 SQL 程式碼,可重複執行。

CREATE PROCEDURE GetEmployeesByDepartment
    @DepartmentName NVARCHAR(50)
AS
BEGIN
    SELECT name, salary
    FROM employees
    WHERE department = @DepartmentName;
END;

-- 執行預存程序
EXEC GetEmployeesByDepartment @DepartmentName = '工程部';

預存程序的優點:

  • 效能較佳(預先編譯)
  • 減少網路傳輸(只傳參數)
  • 提升安全性(可設定執行權限)
  • 程式碼重用

完整教學請參考 SQL 預存程序教學指南

觸發器 Trigger

觸發器在特定事件發生時自動執行。

CREATE TRIGGER trg_audit_employee_update
ON employees
AFTER UPDATE
AS
BEGIN
    INSERT INTO audit_log (table_name, action, timestamp)
    VALUES ('employees', 'UPDATE', GETDATE());
END;

使用場景:

  • 自動記錄異動日誌
  • 維護資料一致性
  • 實作商業邏輯

注意:觸發器會影響效能,應謹慎使用。

交易控制 Transaction

交易確保多個操作要麼全部成功,要麼全部失敗。

BEGIN TRANSACTION;

UPDATE accounts SET balance = balance - 1000 WHERE id = 1;
UPDATE accounts SET balance = balance + 1000 WHERE id = 2;

IF @@ERROR = 0
    COMMIT TRANSACTION;
ELSE
    ROLLBACK TRANSACTION;

ACID 特性:

  • Atomicity(原子性):全部完成或全部取消
  • Consistency(一致性):交易前後資料保持一致
  • Isolation(隔離性):交易之間互不干擾
  • Durability(持久性):完成的交易永久保存

更多進階技巧請參考 SQL 進階應用實戰教學


SQL 安全防護

SQL Injection 是什麼?

SQL Injection(SQL 注入攻擊)是最常見的資料庫攻擊手法之一。

攻擊者透過輸入欄位注入惡意 SQL 程式碼,可能導致:

  • 資料外洩
  • 資料被竄改或刪除
  • 取得系統管理權限

攻擊範例:

假設登入驗證的 SQL 是這樣寫的:

SELECT * FROM users
WHERE username = '輸入的帳號' AND password = '輸入的密碼';

攻擊者在帳號欄位輸入:admin'--

SQL 變成:

SELECT * FROM users
WHERE username = 'admin'--' AND password = '任意';

-- 後面的內容被當成註解,密碼驗證被跳過。

如何防範 SQL Injection

1. 使用參數化查詢(Prepared Statements)

-- 錯誤寫法(容易被攻擊)
SELECT * FROM users WHERE username = '" + username + "'

-- 正確寫法(參數化)
SELECT * FROM users WHERE username = @username

2. 使用 ORM 框架

大多數 ORM(如 Entity Framework、Sequelize)都內建防注入機制。

3. 輸入驗證

  • 限制輸入長度
  • 過濾特殊字元
  • 使用白名單驗證

4. 最小權限原則

資料庫帳號只給必要的權限,避免使用 sa 或 root。

詳細的攻擊解析與防範策略請參考 SQL Injection 完整攻防指南

插圖 3:SQL Injection 攻擊流程圖解

想確保資料庫安全無虞?

OWASP 將 SQL Injection 列為十大網站安全風險之首。每年有超過 30% 的資料外洩事件與 SQL 注入有關。

CloudInsight 資安服務

  • 弱點掃描:自動化檢測 SQL Injection 漏洞
  • 滲透測試:模擬真實攻擊情境
  • 程式碼審查:檢視 SQL 查詢的安全性
  • 資安培訓:提升團隊的安全意識

👉 預約免費資安評估,保護你的企業資料


雲端 SQL 解決方案

為什麼考慮雲端資料庫?

傳統地端資料庫需要自行維護硬體、備份、更新。雲端資料庫讓這些工作交給雲端廠商處理。

雲端資料庫的優勢:

  • 自動備份與災難復原
  • 彈性擴展,按需付費
  • 高可用性架構
  • 減少維運人力

三大雲端 SQL 服務比較

服務廠商特色
Azure SQL DatabaseMicrosoft與 SQL Server 高度相容
Cloud SQLGoogle支援 MySQL、PostgreSQL、SQL Server
Amazon RDSAWS多引擎選擇,生態系完整

選擇建議:

  • 已使用 SQL Server → Azure SQL
  • 使用 Google Cloud 生態系 → Cloud SQL
  • 需要多種資料庫引擎 → Amazon RDS

詳細的功能比較與定價分析請參考 雲端 SQL 資料庫完整比較指南

地端遷移雲端的考量

遷移前需要評估:

  • 現有資料庫的大小與複雜度
  • 應用程式的相容性
  • 網路延遲的影響
  • 長期成本比較

各雲端廠商都提供遷移工具:

  • Azure:Database Migration Service
  • GCP:Database Migration Service
  • AWS:Database Migration Service

雲端資料庫遷移評估

根據 IDC 調查,企業將資料庫遷移至雲端後,平均可降低 40% 的維運成本,同時提升 99.9% 的可用性。

CloudInsight 雲端遷移服務

  • 遷移評估:分析現有環境,評估遷移可行性
  • 成本試算:比較地端與雲端的 TCO
  • 架構規劃:設計最佳化的雲端資料庫架構
  • 遷移執行:協助執行資料遷移與驗證

我們的專長

  • 熟悉 AWS、GCP、Azure 三大雲端平台
  • 豐富的大型資料庫遷移經驗
  • 24/7 遷移監控與支援

👉 預約免費雲端遷移評估,了解你的最佳方案


常見問題 FAQ

Q1: SQL 是什麼?

SQL(Structured Query Language)是用來與關聯式資料庫溝通的標準語言。透過 SQL,你可以查詢、新增、修改、刪除資料庫中的資料,也可以建立和管理資料庫結構。幾乎所有主流資料庫(MySQL、PostgreSQL、SQL Server、Oracle)都使用 SQL。

Q2: SQL 和 MySQL 有什麼不同?

SQL 是一種「語言」,而 MySQL 是一種「資料庫軟體」。你可以把 SQL 想像成英文,MySQL 則像是一本用英文寫的書。其他使用 SQL 的資料庫還有 PostgreSQL、SQL Server、Oracle 等。學會 SQL 後,可以操作任何支援 SQL 的資料庫。

Q3: SQL 要學多久才能上手?

基礎的 SELECT、WHERE、JOIN 語法大約 1-2 週可以掌握。進階的預存程序、效能優化則需要 1-2 個月的練習。建議邊學邊做專案,實際操作是最快的學習方式。完整的學習路線請參考 SQL 自學完整指南

Q4: SQL Injection 是什麼?如何防範?

SQL Injection 是一種攻擊手法,駭客透過輸入欄位注入惡意 SQL 程式碼,可能導致資料外洩或被竄改。防範方式包括:使用參數化查詢、採用 ORM 框架、輸入驗證、最小權限原則。詳細說明請看 SQL Injection 完整攻防指南

Q5: SQL 和 NoSQL 哪個比較好?

沒有絕對的好壞,取決於應用場景。SQL 適合需要複雜查詢、交易一致性的場景(如金融系統);NoSQL 適合需要高擴展性、彈性結構的場景(如社群媒體)。許多企業會混合使用兩者。詳細比較請看 SQL vs NoSQL 完整比較

Q6: SQL Server Express 有什麼限制?

SQL Server Express 是免費版本,主要限制:資料庫大小上限 10GB、最多使用 1GB RAM 和 1 個 CPU 核心。適合學習、開發測試和小型專案。如果需要更高的效能和功能,可以考慮 Standard 或 Enterprise 版本。詳見 SQL Server 版本比較指南

Q7: 如何提升 SQL 查詢效能?

常見的優化方式:建立適當的索引、避免 SELECT *、使用 EXISTS 取代 IN、避免在 WHERE 中對欄位使用函數、使用執行計畫分析慢查詢。進階技巧請參考 SQL 效能優化完整指南

Q8: 哪裡可以線上練習 SQL?

推薦的線上練習平台:SQLZoo(適合新手)、W3Schools SQL(語法參考)、LeetCode SQL 50(求職刷題)、HackerRank SQL(進階挑戰)。這些平台都提供即時執行環境,可以直接練習。更多學習資源請看 SQL 自學完整指南

插圖 4:SQL 學習路線圖

學習資源與下一步

推薦學習順序

  1. 第一週:SELECT、WHERE、ORDER BY
  2. 第二週:JOIN、GROUP BY、聚合函數
  3. 第三週:子查詢、UNION、CASE WHEN
  4. 第四週:INSERT、UPDATE、DELETE
  5. 進階:預存程序、觸發器、效能優化

延伸閱讀

掌握基礎後,建議依序閱讀以下文章深入學習:

基礎語法系列:

SQL Server 系列:

進階應用系列:

專題文章:


訂閱技術週報

想持續學習 SQL 和雲端技術嗎?訂閱 CloudInsight 技術週報,每週獲得:

  • 最新 SQL 技巧與最佳實踐
  • 雲端資料庫趨勢分析
  • 實用工具與資源推薦
  • 獨家案例分享

👉 訂閱技術週報,掌握最新技術動態


參考資料

  1. Microsoft, "SQL Server Documentation" (2024)
  2. W3Schools, "SQL Tutorial" (2024)
  3. LinkedIn, "2024 Most In-Demand Skills Report" (2024)
  4. OWASP, "SQL Injection Prevention Cheat Sheet" (2024)
  5. Gartner, "Database Management Systems Market Guide" (2024)
  6. Stack Overflow, "2024 Developer Survey" (2024)

需要專業的雲端建議?

無論您正在評估雲平台、優化現有架構,或尋找節費方案,我們都能提供協助

預約免費諮詢

相關文章