-- 單行
SELECT * FROM article WHERE id=1;
-- 多行(推薦複雜查詢)
SELECT * FROM article
WHERE id = 1;
IN 批次查詢替代多條 ORSELECT * FROM article WHERE id IN (1,3,5);
CONCAT 結果欄位合併SELECT CONCAT(id, '-', con) AS res FROM article WHERE id = 1;
-- 返回: "1-article content"
LOCATE 字串搜尋定位SELECT LOCATE('hello', 'hello baby'); -- 返回 1(找到位置)
SELECT LOCATE('world', 'hello baby'); -- 返回 0(不存在)
GROUP BY 分組統計SELECT city, COUNT(*) FROM customer GROUP BY city;
-- 列出每個城市及其客戶數(類似 DISTINCT 但可聚合)
常搭配聚合函數:AVG()、MIN()、MAX()、SUM()、COUNT()
HAVING 分組後過濾SELECT city, COUNT(*), MIN(birth_day)
FROM customer
GROUP BY city
HAVING COUNT(*) > 10;
-- 先分組,再篩選客戶數 > 10 的城市
注意:HAVING條件必須出現在 SELECT 或 GROUP BY 列中;GROUP BY + HAVING效能較WHERE低,能用WHERE先過濾則優先用WHERE。
SELECT ... FROM ... WHERE ... GROUP BY ... HAVING ... ORDER BY ... LIMIT ...
DISTINCT 去重SELECT DISTINCT city FROM customer ORDER BY id DESC;
LIMIT 靈活分頁-- 第 101 筆之後所有資料
SELECT * FROM article LIMIT 100, -1;
-- 典型分頁:每頁 20 筆,第 3 頁
SELECT * FROM article LIMIT 40, 20;
SELECT u.user_name
FROM user u, member m
WHERE u.id = m.id
AND m.reg_date >= '2006-12-28'
ORDER BY u.id DESC;
鐵律:多表查詢若欄位名重複,必須指定表別名(如 u.user_name),否則 MySQL 拋出「Column 'user_name' in field list is ambiguous」錯誤。
SELECT *,只取必要欄位WHERE 條件優先於 HAVING 過濾WHERE id > last_id LIMIT 20 遊標式分頁EXPLAIN 驗證索引使用情況