本文系統整理 MySQL 查詢語句核心語法與實戰範例,涵蓋基礎查詢、條件過濾、排序分組、多表連接、子查詢、聚合分析、資料操作(增刪改)等完整體系,適合開發人員快速查閱與 DBA 日常參考。
-- 全欄位查詢 SELECT * FROM pet; -- 指定欄位投影 SELECT name, owner FROM pet; -- 算術運算與別名 SELECT SIN(1+2) AS sin_value;
SELECT * FROM pet WHERE (birth > '1980' AND species = 'dog') OR species = 'bird';
SELECT * FROM pet WHERE sex IS NOT NULL;
-- 第 4 個字元為 n SELECT * FROM pet WHERE owner LIKE '___n%';
SELECT * FROM pet WHERE owner IN ('gwen', 'benny');
SELECT * FROM pet WHERE birth BETWEEN '1990' AND '1999';
-- 多欄位混合排序 SELECT * FROM pet ORDER BY owner ASC, name DESC; -- 條件排序 SELECT * FROM pet WHERE sex = 'm' ORDER BY birth DESC;
-- 字串長度對比 SELECT owner, LENGTH(owner) AS byte_len, CHAR_LENGTH(owner) AS char_len FROM pet; -- 數值函數 SELECT ROUND(2.345, 2), TRUNCATE(2.345, 2), MOD(323, 5);
SELECT NOW(), CURDATE(), CURTIME();
SELECT ADDDATE('2007-02-02', INTERVAL 31 DAY);
SELECT name, birth,
TRUNCATE(DATEDIFF(NOW(), birth)/365, 0) AS age1,
YEAR(NOW()) - YEAR(birth) - (DAYOFYEAR(birth) > DAYOFYEAR(NOW())) AS age2
FROM pet;
SELECT MIN(birth), MAX(birth), AVG(birth), COUNT(*), COUNT(sex), SUM(birth) FROM pet;
-- 各物種數量 SELECT species, COUNT(*) FROM pet GROUP BY species; -- 年齡最大寵物(相關子查詢) SELECT * FROM pet WHERE birth = (SELECT MAX(birth) FROM pet);
-- 數量 >= 2 的物種 SELECT species, COUNT(*) AS c FROM pet GROUP BY species HAVING c >= 2;
SELECT a.name, a.species, a.sex, b.date, b.type, b.remark FROM pet a, event b WHERE a.name = b.name;
-- 寵物產仔年齡 SELECT a.name, a.species, TRUNCATE(DATEDIFF(b.date, a.birth)/365, 0) AS age FROM pet a, event b WHERE a.name = b.name AND b.type = 'litter'; -- 90 年代狗的事件 SELECT a.name, birth, species, sex, date, type, remark FROM pet a, event b WHERE a.name = b.name AND birth BETWEEN '1990' AND '1999' AND species = 'dog';
-- 事件數 >= 2 的寵物
SELECT a.name, species, sex, COUNT(*)
FROM pet a, event b
WHERE a.name = b.name
GROUP BY b.name
HAVING COUNT(*) >= 2;
-- 正好兩件事件的寵物詳細記錄
SELECT a.name, type, date, remark, b.species, b.sex, b.owner
FROM event a, pet b
WHERE a.name = b.name AND b.name IN (
SELECT name FROM event GROUP BY name HAVING COUNT(*) = 2
);
INSERT INTO pet (name, species, birth) VALUES ('KKK', 'snake', '2007-01-01');
INSERT INTO pet VALUES ('KK', 'Diane', 'cat', 'f', NULL, NULL);
INSERT INTO pet SET name = 'k', owner = 'Benny';
-- 基本更新 UPDATE pet SET species = 'snake', sex = 'f', birth = NOW() WHERE name = 'k'; -- 跨表更新:同步事件表生日到寵物表 UPDATE pet a SET birth = (SELECT date FROM event b WHERE a.name = b.name AND b.type = 'birthday') WHERE a.name IN (SELECT name FROM event WHERE type = 'birthday');
DELETE FROM pet WHERE name LIKE 'k%';
| 操作類別 | 語法範例 |
|---|---|
| 基本查詢 | SELECT * FROM `test` WHERE 1 |
| 指定欄位 | SELECT id, uid FROM newdb.`test` WHERE 1 |
| 別名查詢 | SELECT remark AS r FROM `test` WHERE 1 |
| IN 查詢 | SELECT * FROM `test` WHERE id IN (1,2,4) |
| NOT IN | SELECT * FROM `test` WHERE id NOT IN (2,3) |
| 模糊查詢 | SELECT * FROM `test` WHERE `uid` LIKE '%王%' |
| 範圍查詢 | SELECT * FROM `test` WHERE id BETWEEN 1 AND 3 |
| 多條件 | SELECT * FROM `test` WHERE id=1 AND `remark`='學生' |
| 分組 | SELECT * FROM `test` GROUP BY `remark` |
| 排序 | SELECT * FROM `test` ORDER BY `regdate` ASC, id DESC |
| 分頁 | SELECT * FROM `test` LIMIT 0,3 |
| 統計 | SELECT COUNT(*), MAX(id), MIN(id), AVG(id), SUM(id) FROM `test` |
掌握 MySQL 查詢語句核心在於理解關聯代數基礎(選擇、投影、連接、聚合)與優化器行為。建議建立個人常用片段庫,結合 EXPLAIN 與慢查詢日誌持續優化,讓 SQL 既正確又高效。