【MySQL 零基础入门】DQL 核心语法(一):学生表基础查询与聚合函数篇

在上一篇文章中,我们掌握了 DML(数据操作语言) 的增删改操作,今天开始进入 MySQL 中最核心、最常用的 DQL(数据查询语言) 学习。DQL 是业务开发中使用频次最高的 SQL 类型,比如 "查询某个班级的学生""统计各年级的人数",都离不开它。本文先从 基础查询聚合函数 入手,基于 sicheng 数据库的 student 表拆解核心语法!


目录

[一、DQL 概述:查询是数据操作的核心](#一、DQL 概述:查询是数据操作的核心)

[1. 什么是 DQL](#1. 什么是 DQL)

[2. 先准备测试数据](#2. 先准备测试数据)

二、基础查询:精准选择需要的字段

[1. 查询指定字段](#1. 查询指定字段)

[2. 查询所有字段](#2. 查询所有字段)

[3. 给字段设置别名](#3. 给字段设置别名)

[4. 去除重复记录](#4. 去除重复记录)

三、聚合函数:对一列数据做纵向计算

[1. 常用聚合函数汇总](#1. 常用聚合函数汇总)

[2. 实战案例(基于学生表)](#2. 实战案例(基于学生表))

四、核心知识点总结

五、预告:分组查询与条件过滤


一、DQL 概述:查询是数据操作的核心

1. 什么是 DQL

DQL 全称 Data Query Language(数据查询语言),专门用于查询数据库表中的记录,核心关键字是 select。

  • 应用场景:官网数据展示、电商商品搜索、教务系统查成绩等,查询操作的频次远高于增删改。
  • 核心目标:从表中精准、高效地提取需要的数据。

2. 先准备测试数据

所有案例基于 sicheng 数据库的 student 表,先创建表并插入测试数据:

sql 复制代码
-- 切换到 sicheng 数据库
use sicheng;

-- 创建 student 学生表
create table student (
    id int comment '学生编号',
    name varchar(10) comment '学生姓名',
    age tinyint unsigned comment '学生年龄',
    gender char(1) comment '性别',
    class varchar(20) comment '班级',
    score double(4,1) comment '期末成绩',
    address varchar(50) comment '家庭地址'
) comment '学生表';

-- 插入测试数据(10条)
insert into student values
(1, '张三', 16, '男', '高一(1)班', 85.5, '西安市雁塔区'),
(2, '李四', 17, '男', '高一(2)班', 92.0, '西安市未央区'),
(3, '王五', 16, '女', '高一(1)班', 78.5, '西安市雁塔区'),
(4, '赵六', 18, '男', '高一(2)班', 88.0, '西安市莲湖区'),
(5, '孙七', 17, '女', '高一(1)班', 90.0, '西安市碑林区'),
(6, '周八', 16, '男', '高一(3)班', 76.0, '西安市未央区'),
(7, '吴九', 18, '女', '高一(3)班', 89.5, '西安市雁塔区'),
(8, '郑十', 17, '男', '高一(2)班', 81.0, '西安市莲湖区'),
(9, '钱十一', 16, '女', '高一(3)班', 95.0, '西安市碑林区'),
(10, '孙十二', 18, '男', '高一(1)班', 79.0, '西安市未央区');

二、基础查询:精准选择需要的字段

基础查询是 DQL代码 的入门,核心是 select 字段列表 from 表名,重点掌握 字段选择、别名设置、去重 三个技巧。

1. 查询指定字段

当只需要查询部分字段时,显式列出字段名,用逗号分隔。

语法:

select 列名1,列名2,... from 表名;

学生案例:

需求:查询所有学生的姓名、班级和期末成绩。

sql 复制代码
select name,class,score from student;

2. 查询所有字段

如果需要查询所有字段,有两种写法,但实际开发中强烈不推荐用通配符 *(影响查询效率,可读性差)。

不推荐写法(通配符):

sql 复制代码
select * from student;

推荐写法(显式列出所有字段):

sql 复制代码
select id, name, age, gender, class, score, address from student;

3. 给字段设置别名

别名可以增强字段的可读性,用 as 关键字(可省略)。

语法:

select 列名1 [as] 别名1, 列名2 [as] 别名2 from 表名;

学生案例:

需求:查询学生姓名和家庭地址,地址字段别名为 "家庭住址"。

sql 复制代码
-- 写法1:带as
select name, address as '家庭住址' from student;

-- 写法2:省略as(推荐)
select name, address '家庭住址' from student;

4. 去除重复记录

distinct 关键字可以过滤重复的字段值,适用于 "获取唯一值" 的场景。

语法:

select distinct 列名 from 表名;

学生案例:

需求:查询学生表中所有不重复的家庭地址(看有哪些区)。

sql 复制代码
select distinct address from student;

执行结果:

会返回去重后的地址:西安市雁塔区、未央区、莲湖区、碑林区(共 4 个)。⚠️ 注意:distinct 作用于所有选择的字段 ,如果写 select distinct address, class,会按 "地址 + 班级" 组合去重。

三、聚合函数:对一列数据做纵向计算

聚合函数是将一列数据作为整体进行计算,null 值不参与任何聚合函数运算 ,常用的有 count、max、min、avg、sum 五种。

1. 常用聚合函数汇总

函数 功能 适用场景
count (字段 / *) 统计记录数 统计学生总数、某班级人数
max (字段) 求最大值 求最高成绩、最大年龄
min (字段) 求最小值 求最低成绩、最小年龄
avg (字段) 求平均值 求平均成绩、平均年龄
sum (字段) 求和 求某班级成绩总和

2. 实战案例(基于学生表)

案例 1:统计学生总数

sql 复制代码
select count(*) as '学生总数' from student;

select count(id) as '学生总数' from student;

案例 2:求学生的最高 / 最低 / 平均成绩

sql 复制代码
select max(score) as '期末成绩最高分' from student ;

select min(score) as '期末成绩最低分' from student ;

select avg(score) as '平均分' from student;

案例 3:求高一 (1) 班的成绩总和

sql 复制代码
select sum (score) as '高一(1)班成绩总和' from student where class = '高一(1)班';

四、核心知识点总结

知识点 核心内容 易错点
基础查询 select 字段列表 from 表名,显式列字段优于通配符 * 通配符 * 影响效率,实际开发禁用
字段别名 as(可省略)设置,增强可读性 别名含空格时需用引号包裹(如 as '家庭 住址'
去重查询 distinct 作用于所有选中字段,非单个字段 多字段去重时,组合值相同才会去重
聚合函数 纵向计算,null 值不参与运算;count(*) 统计总记录数 count(字段) 会过滤 null 值,count(*) 不会

五、预告:分组查询与条件过滤

本文我们掌握了 DQL 的基础查询和聚合函数,接下来会学习更实用的 分组查询 (按班级 / 性别分组统计)和 条件查询(筛选符合条件的学生),比如 "统计每个班级的男生人数""查询成绩大于 90 分的女生"。关注我,下一篇继续拆解 DQL 核心语法!


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

相关推荐
nbsaas-boot2 小时前
MySQL 中如何实现类似 SQL Server SELECT INTO 的表复制能力(生产级实践指南)
数据库·mysql
qq_386322692 小时前
华为-AI智算网络学习-4 运维与监控实例
学习
这个名字先用着2 小时前
NPN转PNP,PNP转NPN方法
科技·学习·制造
独泪了无痕2 小时前
COALESCE函数:处理NULL值的利器
sql·mysql·函数式编程
Lynnxiaowen2 小时前
今天我们学习kubernetes内容持久化存储
linux·运维·学习·容器·kubernetes
2503_930123932 小时前
Redis群集的三种模式详解
数据库·redis·缓存
云和数据.ChenGuang2 小时前
openEuler 上安装与部署 Redis 的完整技术教程
数据库·redis·缓存
【上下求索】2 小时前
学习笔记094——Ubuntu 如何部署 frp 客户端服务?
笔记·学习·ubuntu
li星野3 小时前
打工人日报#20251210
笔记