☕ NEW! 完成新手任務即可參加抽獎!LINE 星巴克禮券等你拿,名額有限!        🎉 推廣活動:邀請好友註冊 DevLearn,累積推薦抽 LINE 星巴克禮券! 活動詳情 →        🔥 活動期間 2026/4/1 - 5/31 |已有 0 人參加       
sql 初學

WHERE 條件篩選

WHERE — 過濾你要的資料

比喻:WHERE 就像篩金子的篩子 ⛏️

你從河裡撈了一堆沙子和石頭(所有資料), WHERE 就是那個篩子,只讓符合條件的金子(資料)通過。


基本比較運算子

SELECT * FROM Students
WHERE Age = 20;          -- ← 年齡「等於」20 的學生

逐行解析:

SELECT * FROM Students   -- 從 Students 表取所有欄位
WHERE Age = 20;          -- 但只要 Age 等於 20 的那些列
                         -- 注意:SQL 用 = 而不是 ==

所有比較運算子

WHERE Age = 20      -- 等於
WHERE Age != 20     -- 不等於(也可以寫 <>)
WHERE Age > 20      -- 大於
WHERE Age >= 20     -- 大於等於
WHERE Age < 20      -- 小於
WHERE Age <= 20     -- 小於等於

AND、OR、NOT — 組合條件

-- AND:兩個條件都要成立
SELECT * FROM Students
WHERE Age >= 20          -- ← 條件 1:年齡 >= 20
  AND Email LIKE '%@gmail%';  -- ← 條件 2:Email 包含 @gmail

逐行解析:

WHERE Age >= 20              -- 第一個篩選條件
  AND Email LIKE '%@gmail%'  -- AND = 而且,兩個都要成立才會被選中
                             -- 只有「年齡>=20 且 用 gmail」的學生才會出現
-- OR:其中一個條件成立就行
SELECT * FROM Students
WHERE Age = 20           -- ← 20 歲
   OR Age = 22;          -- ← 或 22 歲
-- 20 歲或 22 歲的學生都會被選中
-- NOT:反轉條件
SELECT * FROM Students
WHERE NOT Age = 20;      -- ← 不是 20 歲的(等同 Age != 20)

BETWEEN — 範圍查詢

SELECT * FROM Students
WHERE Age BETWEEN 20 AND 22;  -- ← 20 到 22 歲之間(包含頭尾)

逐行解析:

WHERE Age BETWEEN 20 AND 22   -- 等同於 Age >= 20 AND Age <= 22
                               -- BETWEEN 是「包含邊界」的
                               -- 20, 21, 22 歲都符合

IN — 列表查詢

SELECT * FROM Students
WHERE Age IN (20, 21, 25);    -- ← 年齡是 20 或 21 或 25 的

逐行解析:

WHERE Age IN (20, 21, 25)     -- 等同於 Age=20 OR Age=21 OR Age=25
                               -- IN 比寫一堆 OR 更簡潔
                               -- 括號裡可以放很多值

LIKE — 模糊比對

-- % 代表「任意字元,任意個數」
SELECT * FROM Students
WHERE Name LIKE '小%';        -- ← 名字以「小」開頭的
-- 小明 ✓, 小華 ✓, 大明 ✗

SELECT * FROM Students
WHERE Email LIKE '%@gmail.com';  -- ← Email 結尾是 @gmail.com

-- _ 代表「任意一個字元」
SELECT * FROM Students
WHERE Name LIKE '小_';        -- ← 「小」後面剛好一個字
-- 小明 ✓, 小華 ✓, 小美美 ✗

IS NULL / IS NOT NULL

-- 檢查空值(NULL)
SELECT * FROM Students
WHERE Email IS NULL;           -- ← 沒有填 Email 的學生

SELECT * FROM Students
WHERE Email IS NOT NULL;       -- ← 有填 Email 的學生

⚠️ 重要: NULL 不能用 = NULL,必須用 IS NULL

WHERE Email = NULL    -- ❌ 永遠不會回傳結果!
WHERE Email IS NULL   -- ✅ 正確寫法

條件優先順序

-- 容易搞混的情況
SELECT * FROM Students
WHERE Age = 20 OR Age = 22
  AND Email LIKE '%@gmail%';

-- ⚠️ AND 優先於 OR!上面等同於:
-- Age = 20 OR (Age = 22 AND Email LIKE '%@gmail%')
-- 不是 (Age = 20 OR Age = 22) AND Email LIKE '%@gmail%'

-- ✅ 用括號明確表達意圖
SELECT * FROM Students
WHERE (Age = 20 OR Age = 22)
  AND Email LIKE '%@gmail%';

小結

語法 用途 範例
=, !=, >, < 比較 Age > 20
AND, OR, NOT 邏輯組合 Age > 20 AND Age < 30
BETWEEN 範圍 Age BETWEEN 20 AND 30
IN 列表 Age IN (20, 21, 22)
LIKE 模糊比對 Name LIKE '小%'
IS NULL 空值檢查 Email IS NULL

💡 大家的想法 · 0

載入中...
💬 即時聊天室 🟢 0 人在線
😀 😎 🤓 💻 🎮 🎸 🔥
➕ 新問題
📋 我的工單
💬 LINE 社群
🔒
需要註冊才能使用此功能
註冊帳號即可解鎖測驗、遊戲、簽到、筆記下載等所有功能,完全免費!
免費註冊