MySQL 基础篇 · SELECT 查询大

文章目录

概述

[1.1 最简单的查询](#1.1 最简单的查询)

[1.2 条件筛选 WHERE](#1.2 条件筛选 WHERE)

[1.3 去重 DISTINCT](#1.3 去重 DISTINCT)

[1.4 排序 ORDER BY](#1.4 排序 ORDER BY)

[1.5 限制行数 LIMIT](#1.5 限制行数 LIMIT)

[1.6 聚合函数](#1.6 聚合函数)

[1.7 分组 GROUP BY](#1.7 分组 GROUP BY)

[1.8 分组后筛选 HAVING](#1.8 分组后筛选 HAVING)

[🏁 收工](#🏁 收工)


概述

上回我们讲了外键和约束------数据能存得规矩了。但存进去不是目的,怎么查出来才是每天都要干的事。

SELECT 是 MySQL 里最常用的语句,没有之一。你可能一天写八遍 SELECT * FROM xxx,但它远不止"全查"这么简单。

今天把 SELECT 的所有常用方法捋一遍------条件筛选、排序、分组,全盘托出。搞懂这些,你基本上能应付 90% 的查询需求。

1.1 最简单的查询

sql

复制代码
-- 全查(小心用,数据量大时别这么干)
SELECT * FROM users;

-- 只查指定列
SELECT name, age FROM users;

-- 给列起别名(AS 可以省略)
SELECT name AS 姓名, age AS 年龄 FROM users;

1.2 条件筛选 WHERE

sql

复制代码
-- 等值条件
SELECT * FROM users WHERE age = 25;

-- 不等值
SELECT * FROM users WHERE age > 25;
SELECT * FROM users WHERE age BETWEEN 20 AND 30;

-- 模糊匹配(LIKE)
SELECT * FROM users WHERE name LIKE '张%';    -- 张开头
SELECT * FROM users WHERE name LIKE '%三%';   -- 包含三

-- 空值判断(NULL 不能用 =,得用 IS)
SELECT * FROM users WHERE email IS NULL;
SELECT * FROM users WHERE email IS NOT NULL;

-- 多条件组合(AND / OR)
SELECT * FROM users WHERE age > 20 AND city = '北京';
SELECT * FROM users WHERE city = '北京' OR city = '上海';

-- 集合匹配(IN)
SELECT * FROM users WHERE city IN ('北京', '上海', '深圳');

-- 排除(NOT IN)
SELECT * FROM users WHERE city NOT IN ('北京', '上海');

1.3 去重 DISTINCT

sql

复制代码
-- 查看所有不重复的城市
SELECT DISTINCT city FROM users;

-- 多列组合去重
SELECT DISTINCT city, age FROM users;

1.4 排序 ORDER BY

sql

复制代码
-- 升序(ASC 默认,可以省略)
SELECT * FROM users ORDER BY age ASC;

-- 降序
SELECT * FROM users ORDER BY age DESC;

-- 多列排序(先按 age 排,再按 name 排)
SELECT * FROM users ORDER BY age DESC, name ASC;

1.5 限制行数 LIMIT

sql

复制代码
-- 只取前 5 条
SELECT * FROM users LIMIT 5;

-- 分页:跳过 10 条,取 5 条(第 3 页,每页 5 条)
SELECT * FROM users LIMIT 10, 5;
-- 或者写成 OFFSET 形式
SELECT * FROM users LIMIT 5 OFFSET 10;

1.6 聚合函数

函数 作用
COUNT() 统计行数
SUM() 求和
AVG() 求平均
MAX() 求最大值
MIN() 求最小值

sql

复制代码
SELECT 
    COUNT(*) AS 总人数,
    AVG(age) AS 平均年龄,
    MAX(age) AS 最大年龄,
    MIN(age) AS 最小年龄
FROM users;

1.7 分组 GROUP BY

sql

复制代码
-- 按城市分组,统计每个城市的人数
SELECT city, COUNT(*) AS 人数
FROM users
GROUP BY city;

-- 按城市分组,计算每个城市的平均年龄
SELECT city, AVG(age) AS 平均年龄
FROM users
GROUP BY city;

1.8 分组后筛选 HAVING

WHERE 是分组前筛选,HAVING 是分组后筛选。顺序不能乱。

sql

复制代码
-- 找出平均年龄大于 25 的城市
SELECT city, AVG(age) AS 平均年龄
FROM users
GROUP BY city
HAVING AVG(age) > 25;

-- 找出人数大于 5 的城市
SELECT city, COUNT(*) AS 人数
FROM users
GROUP BY city
HAVING COUNT(*) > 5;

⚠️ WHEREHAVING 的区别:WHERE 管"哪些行参与分组",HAVING 管"哪些组留下来"。顺序是 WHERE → GROUP BY → HAVING → ORDER BY → LIMIT,写错了会报错


🏁 收工

今天把 SELECT 的所有常用方法过了一遍:

基础查询WHERELIKEINORDER BYLIMIT

分组聚合GROUP BYHAVINGCOUNTSUMAVG

相关推荐
风哥2号5 小时前
数据库教程FGMT27‑MySQL数据库基础知识与体系架构
数据库·mysql
YangYang9YangYan6 小时前
2026 校招商品分析岗位 JD 拆解,核心指标、工具与面试考点
大数据·数据库·数据分析
西安栈上月明软件科技7 小时前
从业务黑话到本体图谱:OAG本体建模五步法(西安老系统AI化改造实战)
数据库·人工智能·架构
anxiao_m7 小时前
跨云跨机房大数据迁移怎么选?不同场景工具适配指南
数据库·云启快传
风哥2号9 小时前
数据库教程FGMT43‑MySQL性能分析与优化调整
数据库·mysql
随身数智备忘录9 小时前
财务数据分析如何与业务场景结合?财务数据分析如何从数出有据到数出有用?
数据库
这个DBA有点耶10 小时前
数据库教程:从零基础到实战的完整学习路径(2026版)
数据库·程序员·代码规范
forestsea11 小时前
从零构建 Java 智能体 RAG 系统:Milvus 向量数据库实战指南
java·数据库·milvus
默 语11 小时前
Java新手入门:从零开始安装JDK并配置环境变量
java·开发语言·python·mysql·group by·1024程序员节·数据去重
probex_11 小时前
从 ByConity 到 VictoriaMetrics:一次指标数据迁移引发的四种存储对比
数据库