【MySQL 零基础入门】DQL 核心语法(二):表条件查询与分组查询篇

在上一篇中,我们学会了 DQL 的基础查询和聚合函数,今天继续深入学习 条件查询分组查询 ------ 这是 DQL 中最常用的组合技巧,比如 "筛选成绩优秀的学生""按班级统计人数",都需要这两个知识点配合。所有案例仍基于 sicheng 数据库的 student 表。


目录

一、条件查询:筛选符合要求的记录

[1. 常用条件运算符汇总](#1. 常用条件运算符汇总)

[2. 条件查询实战案例](#2. 条件查询实战案例)

二、分组查询:按类别统计数据

[1. 分组查询基本语法](#1. 分组查询基本语法)

[2. where 与 having 的核心区别](#2. where 与 having 的核心区别)

[3. 分组查询实战案例](#3. 分组查询实战案例)

[4. 分组查询注意事项](#4. 分组查询注意事项)

三、核心知识点总结

四、预告:排序与分页查询


一、条件查询:筛选符合要求的记录

条件查询的核心是 where 子句,在 from 之后添加,用于过滤出符合条件的记录。常用的条件运算符分为 比较运算符逻辑运算符特殊运算符 三类。

1. 常用条件运算符汇总

运算符类型 符号 / 关键字 说明 示例(学生表)
比较运算符 >、>=、<、<= 大小比较 age > 16(年龄大于 16)
比较运算符 = 等于 gender = '女'(性别为女)
比较运算符 <> 或!= 不等于 class <> '高一(1)班'(非 1 班)
逻辑运算符 and 并且(多条件同时满足) age > 16 and gender = '男'
逻辑运算符 or 或者(满足任一条件) score > 90 or class = '高一(3)班'
特殊运算符 between ... and ... 范围查询(包含边界) score between 80 and 90(成绩 80-90)
特殊运算符 in (值 1, 值 2...) 匹配列表中的任意值 age in(16,17)(年龄 16 或 17)
特殊运算符 like 模糊匹配 name like '张%'(姓张的学生)
特殊运算符 is null / is not null 判断是否为 null address is not null(地址非空)

2. 条件查询实战案例

案例 1:基础条件筛选

需求:查询高一 (2) 班的所有学生。

sql 复制代码
select * from student where class = '高一(2)班';

执行结果:返回 3 条记录(李四、赵六、郑十)。

案例 2:多条件组合(and)

需求:查询年龄大于等于 16 岁且成绩大于等于 90 分的女生。

sql 复制代码
select * from student where age >= 16 and score >= 90 and gender = '女'; 

执行结果:返回 2 条记录(孙七、钱十一)。

案例 3:范围查询(between and)

需求:查询成绩在 80~90 分之间的学生(包含 80 和 90)。

sql 复制代码
select * from student where score between 80 and 90;

注意:between 后是最小值,and 后是最大值,顺序不能反(如 between 90 and 80 会无结果)。

案例 4:模糊查询(like)

模糊查询用通配符匹配:

  • %:匹配任意多个字符(包括 0 个);
  • _:匹配单个字符。

需求 1:查询姓张的学生(姓名以 "张" 开头)。

sql 复制代码
select * from student where name like '张%';

需求 2:查询姓名为两个字的学生。

sql 复制代码
select * from student where name like '__';

案例 5:in 运算符(简化多值匹配)

需求:查询年龄为 16 或 18 岁的学生(替代 age=16 or age=18)。

sql 复制代码
select * from student where age in(16,18);

执行结果:返回 6 条记录(16 岁:张三、王五、周八、钱十一;18 岁:赵六、吴九、孙十二)。

二、分组查询:按类别统计数据

分组查询的核心是 group by 子句,通常和聚合函数配合使用,比如 "按班级分组统计人数""按性别分组求平均成绩"。

1. 分组查询基本语法

sql 复制代码
select 分组字段,聚合函数(字段)
from 表名
[where 分组前条件]
group by 分组字段
[分组和条件];

2. where 与 having 的核心区别

这是面试高频考点,一定要分清:

对比项 where having
执行时机 分组前过滤 分组后过滤
聚合函数 不能使用聚合函数作为条件 可以使用聚合函数作为条件
作用对象 原始记录 分组后的结果

3. 分组查询实战案例

案例 1:基础分组(按性别分组统计人数)

需求:统计男生和女生的人数。

sql 复制代码
select gender as '性别',count(id) as '总数'
from student 
group by gender;

执行结果:

  • 男:6 人;
  • 女:4 人。

案例 2:分组前过滤(where)

需求:统计年龄大于 16 岁的学生中,每个班级的人数。

sql 复制代码
select class 班级,count(*) 人数
from student
where age > 16
group by  class;

执行结果:

  • 高一 (1) 班:2 人(孙七、孙十二);
  • 高一 (2) 班:3 人(李四、赵六、郑十);
  • 高一 (3) 班:1 人(吴九)。

案例 3:分组后过滤(having)

需求:统计每个班级的平均成绩,只显示平均成绩大于 85 分的班级。

sql 复制代码
select class 班级, avg(score) 平均成绩
from student 
group by class
having 平均成绩 > 85;

执行结果:

  • 高一 (1) 班:(85.5+78.5+90.0+79.0)/4 = 83.25(不满足);
  • 高一 (2) 班:(92.0+88.0+81.0)/3 = 87.0(满足);
  • 高一 (3) 班:(76.0+89.5+95.0)/3 ≈ 86.83(满足)。

4. 分组查询注意事项

  1. select 中只能包含 分组字段聚合函数 ,查询其他字段无实际意义(比如分组后查 name,只会显示每组第一条记录的姓名);
  2. 执行顺序:where → 分组 → 聚合函数 → having
  3. 聚合函数可以设置别名,having 中可直接使用别名(如 having 平均成绩 > 85)。

三、核心知识点总结

知识点 核心内容 易错点
条件查询 where 子句配合运算符筛选记录;between and 是闭区间;like 通配符区分 %_ between 顺序反了会无结果;like '__' 匹配两个字符
逻辑运算符 and 同时满足,or 满足其一;多条件建议用括号分组(如 (age>16 and gender='女') or score>90 运算符优先级:and 高于 or,易导致条件错误
分组查询 group by 按字段分组,where 分组前过滤,having 分组后过滤 select 中混入非分组 / 非聚合字段,无实际意义
having 用法 可使用聚合函数作为条件,可复用聚合函数别名 where 中不能使用聚合函数(如 where count(*) > 5 报错)

四、预告:排序与分页查询

本文我们掌握了条件查询和分组查询,接下来会学习 DQL 的收尾技巧 ------排序查询 (按成绩 / 年龄排序)和 分页查询(实现分页展示学生列表),这是前端分页功能的核心逻辑。关注我,下一篇继续吃透 DQL!


希望这篇文章对你有帮助,如果你有任何问题或建议,欢迎在评论区留言。谢谢阅读(求攒攒 收藏 关注)!

相关推荐
骥龙2 小时前
3.10、构建网络防线:防火墙、WAF 与蜜罐实战
服务器·网络·数据库·网络安全
SadSunset2 小时前
(15)抽象工厂模式(了解)
java·笔记·后端·spring·抽象工厂模式
帝吃藕和3 小时前
MySQL 知识点复习- 4. update/delete/like
mysql
lemon_sjdk3 小时前
java学习——枚举类
java·开发语言·学习
gugugu.3 小时前
Redis 字符串类型完全指南:从原理到实战应用
数据库·redis·缓存
hd51cc4 小时前
MFC控件 学习笔记二
笔记·学习·mfc
杨云龙UP4 小时前
MySQL 自动备份与覆盖恢复实战:一套脚本搞定全库/按库备份恢复
linux·运维·数据库·sql·mysql
习惯就好zz4 小时前
画画抓型学习总结
学习·九宫格·画画·抓型
Surpass余sheng军4 小时前
AI 时代下的网关技术选型
人工智能·经验分享·分布式·后端·学习·架构