MySQL DQL查询语句详解:从基础到实战

何川
何川
发布时间:2026-10-15| 6人浏览过
原创

本文深入解析MySQL DQL(数据查询语言)的核心语法与实战应用,涵盖简单查询、条件过滤、排序、聚合统计、分组筛选及分页等关键操作,旨在帮助开发者高效掌握SELECT语句,实现精准的数据检索与分析。

DQL简介与核心逻辑

DQL(Data Query Language)即数据查询语言,在MySQL中主要体现为 SELECT 语句。它是数据库中最常用的操作,用于从表中检索满足特定条件的数据。理解DQL的执行顺序至关重要,它决定了如何从原始数据中提取、过滤和展示最终结果。

第1步:理解SQL语法执行顺序

目的:明确查询语句各部分的逻辑执行先后,避免语法错误或逻辑误解。

说明:虽然我们在编写SQL时通常遵循“SELECT ... FROM ... WHERE ...”的顺序,但数据库引擎的实际处理逻辑略有不同。完整的查询结构通常包含以下关键字段:

  • SELECT:指定返回的列或计算表达式。可使用 ALL(默认)返回所有行,或使用 DISTINCT 去除重复值。
  • FROM:指定数据来源表,可支持多表连接(JOIN)并设置别名。
  • WHERE:在分组前对行进行条件过滤。
  • GROUP BY:将数据按指定列分组,以便进行聚合运算。
  • HAVING:在分组后对分组结果进行条件筛选。
  • ORDER BY:对最终结果集进行排序,支持升序(ASC)或降序(DESC)。
  • LIMIT:限制返回的记录数量,常用于分页。

环境准备与数据初始化

为了演示后续的查询操作,我们需要先构建一个测试数据库及数据表。以下是创建数据库 test 和数据表 data 并插入示例数据的完整流程。

第2步:创建数据库与测试表

入口:MySQL命令行客户端或图形化管理工具(如Navicat、MySQL Workbench)。

操作:执行以下SQL脚本创建表结构并填充初始数据。

create database if not exists test;
use test;

create table if not exists data(
    id tinyint primary key auto_increment,
    price double NOT null,
    name varchar(20) not null,
    type varchar(20) not null
);

insert into data values
(null,900,'洗衣机','b'),
(null,1900,'冰箱','b'),
(null,2900,'空调','b'),
(null,3900,'电视','b'),
(null,150,'衣服','c'),
(null,180,'裤子','c'),
(null,200,'鞋子','c'),
(null,188,'洗面奶','a'),
(null,188,'洗发水','a'),
(null,199,'洗衣液','a'),
(null,88,'沐浴露','a'),
(null,5,'泡面','d'),
(null,15,'饼干','d'),
(null,30,'咖啡','d');

DQL核心操作详解

第3步:基础简单查询

目的:掌握基本的数据提取方式,包括全表查询、字段选择及别名使用。

操作:

  • 查询所有字段:直接使用 select * from data;
  • 查询特定字段:如 select name,price from data;
  • 使用表别名:在复杂查询中简化代码,如 select d.name,d.price from data as d;
  • 去重查询:使用 DISTINCT 排除重复值,例如 select distinct price from data;
  • 表达式计算:可在查询中进行数学运算,如价格加100:select name,price +100 newprice from data;

第4步:运算符的应用

目的:利用算术运算符对数据进行实时计算。

操作:以算术乘法为例,若需查询当前价格的1.5倍作为参考价:

select name,price *1.5 newprice from data;

第5步:条件查询(Where子句)

目的:根据特定条件筛选符合条件的行数据。

重要参数:常见的比较运算符包括 =, <>, >, < 等,以及逻辑运算符 AND, OR, NOT。

  • 精确匹配: select * from data where name='洗衣机';
  • 范围查询: 使用 BETWEEN ... AND ...,如查询价格在200到1000之间的商品:select * from data where price between 200 and 1000;
  • 集合匹配: 使用 IN 判断值是否在列表中,如 select * from data where price in(188,900);,等价于使用 OR 连接多个条件。
  • 模糊匹配: 使用 LIKE 配合通配符。% 代表任意多个字符,_ 代表单个字符。例如查询名称中包含“衣”的商品:select * from data where name like '%衣%';
  • 空值判断: 必须使用 IS NULL 或 IS NOT NULL,不能使用 = NULL。例:select * from data where id is null;

注:当NULL参与大小比较时,结果不确定,最大值和最小值均可能为NULL,需谨慎处理。

第6步:排序查询(Order By)

目的:对查询结果按照指定列进行升序或降序排列。

操作:

  • 默认升序: select * from data order by price;
  • 指定降序: select * from data order by price desc;
  • 多字段排序:先按价格排序,价格相同时再按ID排序:select * from data order by price,id;

第7步:聚合函数查询

目的:对一组数据进行统计计算,返回单个汇总值。

常用函数:

  • COUNT(*):统计总行数(包括NULL值);COUNT(id):统计指定非空列的行数。
  • SUM():求和,如 select sum(price) from data;
  • MAX() / MIN():最大值/最小值,可同时查询多个字段的极值。
  • AVG():平均值。

示例:查询类型为'c'的商品平均价格:select avg(price) from data where type='c';

第8步:分组查询(Group By)

目的:将数据按某一列或多列的值进行分组,常配合聚合函数使用。

操作:按商品类型(type)分组,统计每种类型的商品数量和总价:

select type,count(id) from data group by type;
select type,sum(price) from data group by type;

第9步:分组后的条件筛选(Having)

目的:在分组完成后,对分组结果进行二次过滤。注意 HAVING 与 WHERE 的区别:WHERE 在分组前过滤行,HAVING 在分组后过滤组。

操作:查询商品数量为4种以上的类型,并按类型排序:

select type,count(id) count from data group by type having count=4 order by type;

第10步:分页查询(Limit)

目的:控制每次查询返回的记录数量,实现分页显示,减少服务器负载并提升前端加载速度。

语法:LIMIT [offset,] size。其中 offset 是起始索引(从0开始),size 是返回的记录数。

  • 仅限制数量:select * from data limit 5; (返回前5条)
  • 指定偏移量:从第4条记录开始(索引3),向后显示5条:select * from data limit 3,5;

第11步:INSERT INTO SELECT 语句

目的:将一个查询的结果集直接插入到另一个表中,常用于数据备份或汇总统计。

操作:

1. 创建一个新表 data2 并拷贝 data 表的部分字段:

create table data2(name varchar(10),price double);
insert into data2 select name,price from data;

2. 将分组统计结果存入 data3 表:

create table data3(type varchar(10),num int);
insert into data3 select type,count(*) from data group by type order by count(*);
select * from data3;

总结

DQL是MySQL数据操作的核心,熟练掌握SELECT语句的各个子句及其执行逻辑,能够显著提升数据检索效率。从简单的字段提取到复杂的分组统计与分页优化,合理运用这些技术可以满足绝大多数业务场景下的数据分析需求。

以上就是MySQL DQL查询操作的详细解析,更多关于MySQL数据库教程的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。