MySQL 零基础入门教程 —— 第三阶段:进阶查询与函数
本阶段是 SQL 技能提升最大的阶段。你将学会 分组统计、聚合函数、多表联查 —— 这是从“小白”迈向“能独立处理数据”的关键能力。
📌 1. 聚合函数(统计类函数)
聚合函数(Aggregate Functions)用于 对多行数据进行统计,非常常用。
常见的有:
COUNT():统计数量SUM():求和AVG():平均值MAX():最大值MIN():最小值
示例:统计用户数量
SELECT COUNT(*) FROM users;
示例:计算用户的平均年龄
SELECT AVG(age) FROM users;
示例:找最大年龄
SELECT MAX(age) FROM users;
📌 2. 分组查询(GROUP BY)
GROUP BY 用于把数据按某个字段分类,比如“每个年龄段有多少人”。
为了演示,我们先为 users 表增加一个字段:
ALTER TABLE users ADD gender VARCHAR(10);
再随便更新一些性别:
UPDATE users SET gender = 'female' WHERE name = 'Alice';
UPDATE users SET gender = 'male' WHERE name = 'Bob';
UPDATE users SET gender = 'male' WHERE name = 'Charlie';
示例:统计每种性别有多少用户
SELECT gender, COUNT(*)
FROM users
GROUP BY gender;
结果大概像:
female | 1
male | 2
示例:统计每种性别的平均年龄
SELECT gender, AVG(age)
FROM users
GROUP BY gender;
📌 3. 分组过滤(HAVING)
HAVING 用来“过滤分组后的结果”。
示例:只保留人数大于 1 的性别
SELECT gender, COUNT(*)
FROM users
GROUP BY gender
HAVING COUNT(*) > 1;
WHERE 是分组前过滤,HAVING 是分组后过滤。
📌 4. 多表联合查询(JOIN)—— 本章最关键
JOIN 是 SQL 的灵魂之一。
为了讲解,我们先创建一张订单表:
CREATE TABLE orders (
id INT PRIMARY KEY AUTO_INCREMENT,
user_id INT,
amount DECIMAL(10,2),
order_time DATETIME
);
插入一些订单:
INSERT INTO orders (user_id, amount, order_time) VALUES
(1, 100.50, NOW()),
(2, 250.00, NOW()),
(1, 80.00, NOW());
📌 5. INNER JOIN(最常用)
查询用户及对应订单:
SELECT users.name, orders.amount
FROM users
INNER JOIN orders ON users.id = orders.user_id;
解释:
users.id = orders.user_id是匹配条件- 只有有订单的用户才会出现
结果示例:
Alice | 100.50
Bob | 250.00
Alice | 80.00
📌 6. LEFT JOIN(保留左表全部数据)
即使用户没有订单,也会显示。
SELECT users.name, orders.amount
FROM users
LEFT JOIN orders ON users.id = orders.user_id;
结果示例:
Alice | 100.50
Bob | 250.00
Alice | 80.00
Charlie| NULL
Charlie 虽然没有订单,但也会被查出来。
📌 7. RIGHT JOIN(了解即可)
保留右表的全部记录,但实际用得少。
📌 8. 多表 JOIN(进阶)
如果以后你遇到 3~5 张表联查,不要慌,就是把 JOIN 继续往后接即可:
SELECT ...
FROM A
JOIN B ON ...
JOIN C ON ...
JOIN D ON ...;
📌 9. 子查询(Subquery)
当一个查询需要依赖另一个查询的结果时,用子查询。
示例:查询“平均年龄以上”的用户
SELECT *
FROM users
WHERE age > (
SELECT AVG(age) FROM users
);
非常常用!
示例:查出订单金额 > 所有订单平均金额的订单
SELECT *
FROM orders
WHERE amount > (
SELECT AVG(amount) FROM orders
);
📌 10. 小结(你现在已经能做的事情)
通过本阶段,你已经学会:
- 使用聚合函数统计数据(COUNT/SUM/AVG)
- 用 GROUP BY 分组
- 用 HAVING 过滤分组结果
- 多表联合查询(JOIN)
- 子查询(Subquery)
这些能力已经足够你应对 90% 的业务数据库查询工作。
下一阶段我们将学习:
如何像架构师一样设计数据库表结构(字段类型、主键、外键、约束等)