MySQL 查询完全攻略:JOIN 联表、分组聚合(GROUP BY/HAVING)与 SQL
副标题:后端开发必备——从 SELECT 基础到百万级数据调优,一文打尽
前言:SQL 是程序员的“硬通货”
在数据库的世界里,写对 SQL 是本能,写快 SQL 是本事。很多业务 bug 源于查不对,更多性能灾难源于查不快。
本文将 MySQL 查询按照“单表过滤 → 多表联接 → 聚合统计 → 高级子查询 → 性能调优”的路径,全盘拆解 JOIN、IN、GROUP BY、HAVING 以及执行计划优化。全文硬核,不讲废话,所有语法均附带可直接运行的实战案例。
一、基础过滤三板斧:WHERE、IN、BETWEEN
在谈复杂查询前,先把过滤条件吃透。WHERE 决定了扫描数据的范围,范围越小,查询越快。
| 语法 | 场景 | 性能注意 |
|---|---|---|
WHERE id = 1 | 等值精确查找 | 走索引(前提有主键/唯一索引) |
WHERE name LIKE '张%' | 前缀模糊匹配 | 走索引;%张% 必然全表扫描 |
WHERE age BE |