首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL WHERE 條件語句與運算符完整指南

     編輯:MySQL 資料庫相關知識

WHERE 子句語法

SELECT column_list FROM table_name WHERE condition;
UPDATE table_name SET col=val WHERE condition;
DELETE FROM table_name WHERE condition;

condition 為有效表達式,指定資料必須滿足的條件。

運算符完整對照表

運算符說明範例
=等於WHERE status = 1
!= / <>不等於WHERE status != 0
>大於WHERE age > 18
<小於WHERE price < 100
>=大於或等於WHERE score >= 60
<=小於或等於WHERE qty <= 10
BETWEEN ... AND ...範圍內(含邊界)WHERE age BETWEEN 20 AND 30
NOT BETWEEN ... AND ...不在範圍內WHERE age NOT BETWEEN 20 AND 30
IN (val1, val2, ...)在列舉值中WHERE city IN ('Taipei','Taichung')
NOT IN (...)不在列舉值中WHERE status NOT IN (0,-1)
LIKE模式匹配WHERE name LIKE 'John%'
NOT LIKE不匹配模式WHERE email NOT LIKE '%@spam.com'
IS NULL空值判斷WHERE deleted_at IS NULL
IS NOT NULL非空判斷WHERE email IS NOT NULL
AND邏輯與WHERE a=1 AND b=2
OR邏輯或WHERE a=1 OR b=2
NOT邏輯非WHERE NOT (a=1 AND b=2)

模式匹配通配符

  • %:匹配任意長度字串(含 0 字元)
    WHERE name LIKE '%son' → Johnson, Wilson, Son
  • _:匹配單一字元
    WHERE code LIKE '_ _ _' → 正好 3 字元
  • 轉義:WHERE path LIKE '%/_%' ESCAPE '/' → 字面匹配 _

運算符優先級(高→低)

  1. NOT
  2. AND
  3. OR

建議:明確使用括號 避免歧義,如 WHERE (a=1 OR a=2) AND b=3。

實戰範例

-- 精確匹配
SELECT * FROM user WHERE username = 'Jack';

-- 日期範圍
SELECT uid, username FROM user WHERE regdate >= UNIX_TIMESTAMP('2009-01-01');

-- 模糊搜尋
SELECT * FROM user WHERE username LIKE '%user%';

-- 多條件 OR
SELECT * FROM user WHERE username LIKE '%user%' OR username LIKE '%admin%';

-- 複合條件
SELECT * FROM orders
WHERE status IN ('paid','shipped')
  AND created_at BETWEEN '2024-01-01' AND '2024-12-31'
  AND user_id IS NOT NULL;

效能提示

  • LIKE 'prefix%' 可用索引;LIKE '%suffix' 或 LIKE '%mid%' 導致全表掃描
  • IN 列表過長(>1000)效能下降,考慮臨時表或 JOIN
  • IS NULL 可用索引;!=、NOT IN、NOT LIKE 通常無法用索引
  • 複合索引最左前綴原則:WHERE a=1 AND b=2 用到 idx(a,b);WHERE b=2 用不到

小結

WHERE 子句是 SQL 資料篩選的核心。熟練掌握運算符語義、優先級、索引友好度,能寫出正確且高效的查詢。實務上:多用括號、慎用否定條件、善用覆蓋索引。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved