歡迎來到結構化查詢語言(SQL)的世界!

哈囉,未來的數據科學家們!本章節將帶你進入 SQL(讀作 "sequel")的世界,它的全稱是 Structured Query Language(結構化查詢語言)。別擔心,名字聽起來很複雜,其實 SQL 就是一套用來跟數據庫溝通的通用語言。

你可以把數據庫想像成一座巨大的圖書館,而 SQL 就是你用來查找、整理或更新館內書籍的指令集(或提問方式)。如果你未來想從事數據相關的工作(這幾乎是現代每份工作的必備技能!),那麼精通 SQL 絕對是關鍵!

快速複習:關聯式數據庫

在深入了解 SQL 之前,請記得關聯式數據庫是透過 資料表(Tables) 來組織數據的。

  • 資料表 (Table):就像一個試算表(例如:學生圖書)。
  • 記錄 (Record) 或稱列 (Row):一筆完整的數據條目(例如:關於某位特定學生的所有資訊)。
  • 欄位 (Field) 或稱行 (Column):數據的類別(例如:學生姓名出生日期)。

第一節:什麼是 SQL 及其用途?

SQL 的作用

SQL 是一種聲明式語言,意思是你只需要告訴數據庫你想要「什麼」,數據庫就會自動計算出「如何」取得它。它被用來管理和操作儲存在關聯式數據庫管理系統(RDBMS)中的數據。

SQL 指令通常分為兩大類:

1. 數據定義語言 (Data Definition Language, DDL)

DDL 指令用於 定義 數據庫本身的結構——也就是創建、修改或刪除資料表和數據庫。

記憶小撇步: Define the Data Layout(定義數據布局)。

2. 數據操作語言 (Data Manipulation Language, DML)

DML 指令用於 操作 已建立結構 內部 的數據——也就是新增、刪除、修改或擷取記錄。這就是所謂的查詢(Querying)!

記憶小撇步: Manage and Move the Live data(管理與移動實時數據)。

重點總結(DDL 與 DML 的區別): DDL 負責搭建空的盒子(結構),而 DML 負責把東西(數據)放進盒子裡並進行處理。

第二節:數據定義語言 (DDL) 指令

這些指令通常只在設定環境時執行一次。

1. 建立新資料表:CREATE TABLE

此指令用於建立一個新的資料表,包括定義欄位名稱及其數據類型(例如:文字、整數、日期)。

比喻: 你正在為一個新的檔案櫃繪製設計藍圖。

語法範例:建立 'Books' 資料表
CREATE TABLE Books (
    BookID INTEGER,
    Title TEXT,
    Author TEXT,
    PublicationYear INTEGER
);

重點: 每個欄位都必須定義特定的 數據類型(例如:INTEGER 用於整數,TEXT 用於名稱或文字)。

2. 刪除整個資料表:DROP TABLE

此指令會永久刪除整個資料表以及 其中所有的數據。請務必小心使用!

語法範例:
DROP TABLE Books;

你知道嗎? 在許多數據庫系統中,一旦資料表被 DROP(刪除),除非你有備份,否則它將永遠消失!

第三節:數據操作語言 (DML) 指令

這是 SQL 最常見的用途——進行提問並變更數據。

1. 擷取數據:SELECTFROM (核心查詢)

每次你想查看數據時,都要使用 SELECTFROM 子句。

  • SELECT 指定你想查看哪些欄位(行)。
  • FROM 指定數據來自哪個資料表。
步驟範例 1:顯示所有欄位

如果你想查看 Students 資料表中的 所有內容

SELECT *
FROM Students;

星號 (*) 是萬用字元,代表「顯示所有欄位」。

步驟範例 2:顯示特定欄位

如果你只想看學生的姓名和電郵地址:

SELECT StudentName, Email
FROM Students;

2. 過濾數據:WHERE 子句

WHERE 子句是用來篩選結果的,只顯示符合特定條件的記錄。這就是查詢強大的原因!

常用的比較運算子:
  • = (等於)
  • > (大於)
  • < (小於)
  • >= (大於或等於)
  • <= (小於或等於)
  • <>!= (不等於)
範例:找出 ID 大於 50 的學生
SELECT StudentName, StudentID
FROM Students
WHERE StudentID > 50;
過濾文字數據:

當過濾文字數據(如名稱或地址)時,該值通常必須用 單引號 (') 包起來。

SELECT *
FROM Students
WHERE Grade = 'A';

3. 組合條件:AND, OR, 與 NOT

你可以在 WHERE 子句中使用邏輯運算子來組合多個條件。

  • AND: 兩個條件都必須成立。
  • OR: 至少其中一個條件成立即可。
  • NOT: 反轉條件含義(例如:NOT Grade = 'A' 代表任何不是 A 的成績)。
使用 AND 的範例:找出獲得 'A' 且居住在倫敦的學生
SELECT StudentName
FROM Students
WHERE Grade = 'A' AND City = 'London';

4. 排序結果:ORDER BY

ORDER BY 子句用於對查詢結果進行排序,它總是位於 SQL 語句的最末端。

  • ASC (遞增):由低到高(A-Z, 1-10)。這是預設設定。
  • DESC (遞減):由高到低(Z-A, 10-1)。
範例:顯示所有學生,並按姓名排序 (A 到 Z)
SELECT *
FROM Students
ORDER BY StudentName ASC;
查詢結構小提示:
1. SELECT (我需要哪些欄位?)
2. FROM (數據存在哪張表裡?)
3. WHERE (我需要過濾哪些記錄?)
4. ORDER BY (我需要將結果排序嗎?)

第四節:數據修改 (DML)

1. 新增數據:INSERT INTO

此指令在現有的資料表中加入一筆新記錄(新的一列)。你必須提供對應欄位的數值。

語法範例:新增一筆書籍記錄
INSERT INTO Books (BookID, Title, Author)
VALUES (101, 'The Great Adventure', 'A. N. Author');

步驟 1: 列出資料表名稱,並在括號內列出你要填入的欄位。
步驟 2: 使用 VALUES 並按相同順序填入對應的數據。

2. 修改現有數據:UPDATESET

UPDATE 指令用於修改一筆或多筆現有記錄中的數據。

  • UPDATE 指定要修改的資料表。
  • SET 指定要修改的欄位及其新值。
  • WHERE 非常重要,用來指定要修改哪幾筆記錄。

常見錯誤警告! 如果你忘記使用 WHERE 子句,UPDATE 指令將會修改資料表中的 每一筆記錄。請務必檢查你的 WHERE 子句!

範例:將學生 ID 為 42 的成績修改為 'A+'
UPDATE Students
SET Grade = 'A+'
WHERE StudentID = 42;

3. 刪除特定數據:DELETE FROM

此指令從資料表中移除整筆記錄(列)。

範例:移除所有住在 'London' 的學生
DELETE FROM Students
WHERE City = 'London';

警告: 就跟 UPDATE 一樣,如果你在沒有 WHERE 子句的情況下執行 DELETE FROM Students,你將會刪除資料表中 所有 的記錄,只剩下空空的資料表結構。

重點總結 (DML): DML 允許你查詢 (SELECT)、新增 (INSERT)、修改 (UPDATE) 和移除 (DELETE) 數據。WHERE 子句是你確保操作精確與安全的最強大工具!

總結與後續建議

你現在已經掌握了 SQL 的基礎知識!請記住,SQL 是推動數位世界的語言,它讓應用程式與使用者能夠高效地處理海量數據。

接下來請多練習 SELECT... FROM... WHERE 查詢的結構,因為這是你未來進行數據庫操作的一切基石!祝你好運!