SQL 陳述式可跨行書寫,長查詢建議分行縮排提升可讀性:
SELECT *
FROM article
WHERE id = 1;
SELECT * FROM article WHERE id IN (1, 3, 5);
比多次 OR 更簡潔,優化器亦能更好處理。
SELECT CONCAT(id, '-', content) AS res FROM article WHERE id = 1;
回傳 1-article content 格式,常用於報表匯出、API 組裝。
SELECT LOCATE('hello', 'hello baby'); -- 回傳 1(位置從 1 起算)
SELECT LOCATE('xyz', 'hello baby'); -- 回傳 0(不存在)
-- 列出各城市客戶數
SELECT city, COUNT(*) FROM customer GROUP BY city;
-- 進階:搭配 AVG/MIN/MAX/SUM
SELECT city, COUNT(*), MIN(birth_day), AVG(age)
FROM customer GROUP BY city;
SELECT city, COUNT(*), MIN(birth_day)
FROM customer
GROUP BY city
HAVING COUNT(*) > 10;
注意:HAVING 條件必須出現在 SELECT 清單或 GROUP BY 中;GROUP BY + HAVING 較 WHERE 慢,能用 WHERE 先過濾盡量用 WHERE。
標準順序:WHERE → GROUP BY → HAVING → ORDER BY,撰寫時遵循此序可避免語法錯誤。
SELECT DISTINCT city FROM customer ORDER BY id DESC;
-- 跳過前 100 筆,取其餘所有
SELECT * FROM article LIMIT 100, -1;
-- 典型分頁:第 3 頁,每頁 20 筆
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;
若兩表同名欄位(如 user_name),必須加表別名限定(u.user_name),否則報錯。