首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 進階 SELECT 查詢:GROUP BY、HAVING、LIMIT 與排序進階

     編輯:MySQL 資料庫相關知識

前言

在掌握基本查詢後,進階分析需求(如分組統計、條件過濾分組、分頁顯示)需要用到 GROUP BY、HAVING、LIMIT 等子句。本篇深入解析這些進階查詢技巧。

一、邏輯否定:NOT 關鍵字

NOT 可否定任何邏輯表達式或關鍵字(如 LIKE、NULL、BETWEEN 等)。

SELECT * FROM mytable WHERE sex NOT IN ('f', 'm');

二、分組統計:GROUP BY 與 HAVING

語法結構

SELECT 欄位, 聚合函數
FROM 資料表
WHERE 條件
GROUP BY 分組欄位
HAVING 分組條件
ORDER BY 排序欄位;

核心概念

  • GROUP BY: 依指定欄位將資料分組,搭配聚合函數(AVG、COUNT、MAX、MIN、SUM)計算各組統計值。
  • HAVING: 針對「分組後的結果」進行篩選,可使用聚合函數;WHERE 則是針對「原始資料列」篩選,不可用聚合函數。
  • ALL 關鍵字: Transact-SQL 擴展,保留所有分組(甚至被 WHERE 排除的),但若同時使用 HAVING 將失效。

實用範例

統計各性別人數,且只顯示人數大於 1 的群組:

SELECT sex, COUNT(*) AS cnt 
FROM mytable 
GROUP BY sex 
HAVING COUNT(*) > 1;

三、排序進階:ORDER BY 細節

  • 可使用 欄位名、別名 或 位置編號 排序:
    GROUP BY id、GROUP BY myid、GROUP BY 1 效果相同(不建議用位置編號,降低可讀性)。
  • DESC 遞減、ASC 遞增(預設)。

四、分頁查詢:LIMIT 子句

LIMIT 限制回傳行數,支援一或兩個參數:

  • LIMIT 5:等同 LIMIT 0, 5,取前 5 筆(偏移量 0 起算)。
  • LIMIT 10, 5:跳過前 10 筆,取接著的 5 筆(第 11-15 筆)。

常用於網頁分頁:LIMIT (頁碼-1)*每頁筆數, 每頁筆數。

五、PROCEDURE 關鍵字說明

PROCEDURE 為預留關鍵字,用於未來支援預存程序。目前 MySQL 版本尚未實作,保留以利擴充。

小結

掌握 GROUP BY/HAVING 的分組邏輯差異、ORDER BY 的靈活引用方式、LIMIT 的分頁機制,能大幅提升複雜報表與分頁查詢的開發效率。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved