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

相关推荐
程序员-Benothing2 小时前
MySQL 索引下推是什么?——深入理解 ICP 原理与实践
android·数据库·mysql
这个DBA有点耶2 小时前
MySQL主从延迟的“最后一公里”:如何把延迟压到极限
数据库·程序员·架构
DianSan_ERP2 小时前
WMS接入电商平台自动化履约实战:一张订单从平台到出库的接口时序设计
java·前端·网络·数据库·安全·架构·自动化
智购科技自动售货机工厂2 小时前
2026自动售货机语音支付模块集成:从声纹识别到支付闭环的工程实践~YH
大数据·服务器·网络·数据库·人工智能
做一个AK梦3 小时前
论基于云原生数据库的企业信息系统架构设计
数据库·云原生
风哥2号3 小时前
PostgreSQL数据库恢复工具FGPDU(FGEDU PostgreSQL DUL)
数据库·postgresql
智购科技智能售货柜3 小时前
2026自动售货机峰值交易流量应对方案:从消息削峰到弹性扩容的工程实践~YH
数据库·人工智能·单片机·嵌入式硬件·yolo
JavaPub-rodert4 小时前
Ontop 详解:不搬数据库,也能把 MySQL / PostgreSQL 变成知识图谱
数据库·mysql·postgresql
xiaoxiang96094 小时前
Git 分支同步实战:`merge -X theirs` 与完全合并方案
数据库·git·elasticsearch