歡迎來到結構化查詢語言(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) 指令
這些指令通常只在設定環境時執行一次。
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. 擷取數據:SELECT 與 FROM (核心查詢)
每次你想查看數據時,都要使用 SELECT 和 FROM 子句。
- 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. 修改現有數據:UPDATE 與 SET
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,你將會刪除資料表中 所有 的記錄,只剩下空空的資料表結構。
總結與後續建議
你現在已經掌握了 SQL 的基礎知識!請記住,SQL 是推動數位世界的語言,它讓應用程式與使用者能夠高效地處理海量數據。
接下來請多練習 SELECT... FROM... WHERE 查詢的結構,因為這是你未來進行數據庫操作的一切基石!祝你好運!