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

MySQL 分組查詢 (GROUP BY) 與連接查詢 (JOIN) 深度解析與實戰範例

     編輯:MySQL 資料庫相關知識

一、GROUP BY 分組查詢全解析

語法:GROUP BY 屬性名 [HAVING 條件] [WITH ROLLUP]

1. 單獨使用:僅顯示每組第一條

SELECT * FROM employee GROUP BY sex;
-- 只會返回男、女各一條記錄(非確定性,慎用)

2. 配合 GROUP_CONCAT() 顯示組內明細

SELECT sex, GROUP_CONCAT(name) FROM employee GROUP BY sex;
-- 結果:
-- 女 | 小紅,小蘭
-- 男 | 張三,王五,王六

3. 配合聚合函數統計

SELECT sex, COUNT(*) FROM employee GROUP BY sex;
-- 結果:
-- 女 | 2
-- 男 | 3

4. HAVING 過濾分組結果

SELECT sex, COUNT(*) FROM employee GROUP BY sex HAVING COUNT(*) >= 3;
-- 僅顯示 男 | 3
WHERE 過濾原始行,HAVING 過濾分組後結果。

5. 多字段分組(層級遞進)

SELECT * FROM employee GROUP BY dept_id, sex;
-- 先按部門分組,組內再按性別分組

6. WITH ROLLUP 超級聚合

SELECT sex, COUNT(*) FROM employee GROUP BY sex WITH ROLLUP;
-- 結果:
-- 女 | 2
-- 男 | 3
-- NULL | 5  <-- 總計行

字符串列會拼接,數值列求和。

二、連接查詢 (JOIN) 核心模式

1. 內連接:只返回匹配行


SELECT e.id, e.name, e.dept_id, d.dept_name
FROM employee e
INNER JOIN department d ON e.dept_id = d.dept_id;
-- 同名欄位建議加表別名限定

2. 外連接

類型語法結果特徵
左連接LEFT JOIN保留左表所有行,右表無匹配則 NULL
右連接RIGHT JOIN保留右表所有行,左表無匹配則 NULL

-- 左連接:查所有員工及其部門(無部門也顯示)
SELECT e.name, d.dept_name
FROM employee e
LEFT JOIN department d ON e.dept_id = d.dept_id;

三、聚合函數速查

函數用途範例
COUNT(*)行數SELECT COUNT(*) FROM employee
SUM(col)求和SELECT SUM(score) FROM grade GROUP BY student_id
AVG(col)平均SELECT AVG(age) FROM employee
MAX(col)最大值SELECT MAX(score) FROM grade
MIN(col)最小值SELECT MIN(age) FROM employee
SUM/AVG 只能用於數值類型;MAX/MIN 對字符串按 ASCII 比較。

四、UNION 合併結果集


SELECT id, name FROM employee WHERE dept_id = 1
UNION
SELECT id, name FROM employee WHERE dept_id = 2;
-- UNION 去重,UNION ALL 保留重複(效能更高)

五、別名最佳實踐


-- 表別名
SELECT e.name, d.dept_name FROM employee e JOIN department d ON e.dept_id = d.dept_id;

-- 字段別名(AS 可省略)
SELECT dept_id AS department_id, dept_name AS department_name FROM department;

實戰建議

  • 大表 JOIN 前先用 WHERE 過濾減少參與行
  • JOIN 條件欄位務必建索引
  • 避免 SELECT *,只取需要列
  • GROUP BY 列與 SELECT 非聚合列保持一致(ONLY_FULL_GROUP_BY 模式)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved