MySQL 常用語法整理
以下範例以 users
資料表為例,欄位包含:id
, name
, email
, age
, created_at
。
✅ 插入資料(INSERT)
1 2
| INSERT INTO users (name, email, age) VALUES ('小明', 'xiaoming@example.com', 25);
|
✅ 查詢資料(SELECT)
查詢特定欄位
1
| SELECT name, email FROM users;
|
✅ 條件查詢 WHERE
1 2
| SELECT 欄位名稱 FROM 表格名稱 WHERE 條件;
|
🔍 常見的 WHERE
條件語法
條件範例 |
說明 |
= , <> , != , < , > , <= , >= |
比較運算子 |
AND , OR , NOT |
多條件結合 |
BETWEEN A AND B |
範圍查詢(含 A 和 B) |
IN (值1, 值2, ...) |
等同多個 OR |
LIKE '%字串%' |
模糊比對 |
IS NULL , IS NOT NULL |
NULL 判斷 |
EXISTS , NOT EXISTS |
子查詢存在性 |
🟡 NULL 判斷語法
1 2 3 4 5 6 7
| SELECT * FROM users WHERE age IS NULL;
SELECT * FROM users WHERE age IS NOT NULL;
|
📝 注意:不能用 = NULL
,會無法正確判斷。
📋 常見的 WHERE
語句範例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| SELECT * FROM users WHERE age >= 18;
SELECT * FROM users WHERE age >= 18 AND gender = 'female';
SELECT * FROM users WHERE city = 'Taipei' OR city = 'Kaohsiung';
SELECT * FROM products WHERE name LIKE '%手機%';
SELECT * FROM orders WHERE order_date BETWEEN '2024-01-01' AND '2024-12-31';
SELECT * FROM users WHERE id IN (1, 2, 3, 4);
SELECT * FROM logs WHERE deleted_at IS NULL;
|
✅ 更新資料(UPDATE)
1 2 3
| UPDATE users SET age = 26 WHERE name = '小明';
|
✅ 刪除資料(DELETE)
1 2
| DELETE FROM users WHERE name = '小明';
|
✅ 排序資料(ORDER BY)
1 2
| SELECT * FROM users ORDER BY age DESC;
|
✅ 限制回傳筆數(LIMIT)
1 2
| SELECT * FROM users LIMIT 1;
|
✅ 結合條件 + 排序 + LIMIT 1
取得年紀最大的使用者
1 2 3
| SELECT * FROM users ORDER BY age DESC LIMIT 1;
|
取得最新註冊的使用者(假設有 created_at 欄位)
1 2 3
| SELECT * FROM users ORDER BY created_at DESC LIMIT 1;
|
MySQL 批量插入與批量更新語法
✅ 批量插入(Bulk Insert)
1 2 3 4 5
| INSERT INTO users (name, email, age) VALUES ('小明', 'xiaoming@example.com', 25), ('小華', 'xiaohua@example.com', 30), ('小美', 'xiaomei@example.com', 22);
|
✅ 批量更新(Bulk Update)方式一:使用 CASE WHEN
假設我們要依據 id 更新 age 欄位:
1 2 3 4 5 6 7
| UPDATE users SET age = CASE id WHEN 1 THEN 26 WHEN 2 THEN 31 WHEN 3 THEN 23 END WHERE id IN (1, 2, 3);
|
✅ 批量更新(Bulk Update)方式二:JOIN 另一張臨時表
可用於複雜更新情境(例如來自另一張表的資料)
1 2 3 4 5 6 7 8 9
| UPDATE users u JOIN ( SELECT 1 AS id, 26 AS age UNION ALL SELECT 2, 31 UNION ALL SELECT 3, 23 ) tmp ON u.id = tmp.id SET u.age = tmp.age;
|
✅ 建議使用方式:
- 少量更新 → 使用
CASE WHEN
- 大量更新且來自其他資料來源 → 使用
JOIN
MySQL 常用聚合函數與日期函數
✅ 聚合函數(Aggregate Functions)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| SELECT COUNT(*) FROM users;
SELECT COUNT(email) FROM users;
SELECT SUM(age) FROM users;
SELECT AVG(age) FROM users;
SELECT MAX(age) FROM users;
SELECT MIN(age) FROM users;
SELECT gender, AVG(age) FROM users GROUP BY gender;
|
✅ 日期函數(Date Functions)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| SELECT CURDATE();
SELECT NOW();
SELECT CURTIME();
SELECT STR_TO_DATE('2025-04-10', '%Y-%m-%d');
SELECT DATE_ADD(NOW(), INTERVAL 7 DAY); SELECT DATE_SUB(NOW(), INTERVAL 1 MONTH);
SELECT YEAR(created_at) AS year, MONTH(created_at) AS month, DAY(created_at) AS day, HOUR(created_at) AS hour, MINUTE(created_at) AS minute FROM users;
SELECT DATE_FORMAT(created_at, '%Y/%m/%d %H:%i:%s') AS formatted_time FROM users;
|
✅ 結合範例:統計每月註冊人數
1 2 3 4 5
| SELECT DATE_FORMAT(created_at, '%Y-%m') AS register_month, COUNT(*) AS user_count FROM users GROUP BY register_month ORDER BY register_month DESC;
|