在掌握基本查詢後,進階分析需求(如分組統計、條件過濾分組、分頁顯示)需要用到 GROUP BY、HAVING、LIMIT 等子句。本篇深入解析這些進階查詢技巧。
NOT 可否定任何邏輯表達式或關鍵字(如 LIKE、NULL、BETWEEN 等)。
SELECT * FROM mytable WHERE sex NOT IN ('f', 'm');
SELECT 欄位, 聚合函數 FROM 資料表 WHERE 條件 GROUP BY 分組欄位 HAVING 分組條件 ORDER BY 排序欄位;
AVG、COUNT、MAX、MIN、SUM)計算各組統計值。WHERE 則是針對「原始資料列」篩選,不可用聚合函數。統計各性別人數,且只顯示人數大於 1 的群組:
SELECT sex, COUNT(*) AS cnt FROM mytable GROUP BY sex HAVING COUNT(*) > 1;
GROUP BY id、GROUP BY myid、GROUP BY 1 效果相同(不建議用位置編號,降低可讀性)。DESC 遞減、ASC 遞增(預設)。LIMIT 限制回傳行數,支援一或兩個參數:
LIMIT 5:等同 LIMIT 0, 5,取前 5 筆(偏移量 0 起算)。LIMIT 10, 5:跳過前 10 筆,取接著的 5 筆(第 11-15 筆)。常用於網頁分頁:LIMIT (頁碼-1)*每頁筆數, 每頁筆數。
PROCEDURE 為預留關鍵字,用於未來支援預存程序。目前 MySQL 版本尚未實作,保留以利擴充。
掌握 GROUP BY/HAVING 的分組邏輯差異、ORDER BY 的靈活引用方式、LIMIT 的分頁機制,能大幅提升複雜報表與分頁查詢的開發效率。