MySQL基础:select、distinct与limit语句实战详解

清欢
清欢
发布时间:2026-10-16| 5人浏览过
原创

在MySQL数据库中,高效获取数据是开发的基础。本文深入讲解SELECT、DISTINCT和LIMIT三大核心关键字的用法,涵盖从基础列查询到复杂去重逻辑及分页实现的完整操作指南。

准备工作:数据库与环境

为了直观理解各语句的效果,首先构建一个测试用的 user 表。该表包含主键 ID、用户名、年龄和性别四个字段,引擎为 InnoDB。

CREATE TABLE `user` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `name` varchar(255) NOT NULL COMMENT '用户名',
  `age` int(11) NOT NULL COMMENT '年龄',
  `sex` smallint(6) NOT NULL COMMENT '性别',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

初始数据插入如下:

INSERT INTO `user` VALUES 
(1, '李子捌', 18, 1), (2, '张三', 22, 1), 
(3, '李四', 38, 1), (4, '王五', 25, 1), 
(5, '六麻子', 13, 0), (6, '田七', 37, 1);

注意: 自 MySQL 4.1 起,关键字默认不区分大小写。虽然库名和表名通常不敏感,但建议保持统一规范以免移植出错。

核心查询:SELECT 语句使用

第 1 步:指定数据库与单列查询

操作入口为 MySQL 命令行或客户端工具。首先使用 use 命令切换到目标数据库(如 liziba),随后编写查询语句。

目的: 获取特定字段的完整列表。

-- 语法格式
SELECT column_name FROM table_name;

-- 实际操作:查询 user 表中的 name 列
SELECT name FROM user;

第 2 步:多列与全表查询

目的: 按需返回多个字段或全部字段数据。

  • 多列查询: 在 SELECT 后紧跟列名,以英文逗号分隔。例如查询姓名和年龄:SELECT name, age FROM user;
  • 全表查询: 使用通配符 * 代替所有列名:SELECT * FROM user;

性能提示: 在生产环境中,除非绝对必要,否则应避免使用 SELECT *。明确指定所需列可以减少网络传输开销并提升执行效率,特别是在表结构复杂且列数较多的情况下。

数据清洗:DISTINCT 去重逻辑

当需要查看列中唯一值的集合时,应使用 DISTINCT 关键字。其作用于 SELECT 后的列之前。

第 1 步:单列去重测试

先在表中插入一条重复年龄段的数据用于测试:

INSERT INTO `user` VALUES (7, '谢礼', 18, 1);

此时直接查询年龄会看到两个 18 岁。使用去重后:

SELECT DISTINCT age FROM user;

结果集将合并相同的年龄值,仅返回唯一的年龄列表(共 6 个值)。

第 2 步:多字段组合去重(关键点)

重要概念: DISTINCT 对多字段的作用是基于“组合唯一性”判断的,而非单独对每个字段去重。

场景 A:字段无完全匹配行

如果查询 DISTINCT age, name,由于每个人(name)的年龄不同,系统无法合并任何行,因此会返回所有记录(7 条)。

SELECT DISTINCT age, name FROM user; -- 结果仍为 7 条

场景 B:存在完全相同的组合行

观察年龄 (age) 和性别 (sex)。李子捌与谢礼的记录均为 (18, 1)。此时:

SELECT DISTINCT age, sex FROM user;

系统将识别出这两行完全相同,从而过滤掉其中一行,最终返回 6 条唯一的身分组合记录。

结果控制:LIMIT 分页与截取

LIMIT 关键字用于限制查询返回的行数,常用于前端表格的分页展示。

第 1 步:单参数模式(限制行数)

LIMIT N 表示取前 N 行数据,起始索引默认为 0。

SELECT * FROM user LIMIT 1; -- 只取第一行

边界处理: 若设定的数量大于实际总行数,MySQL 不会报错,而是返回所有可用数据。

第 2 步:双参数模式(偏移量分页)

语法:LIMIT offset, count。

  • offset:起始位置(索引),从 0 开始计数。
  • count:获取的最大记录数。

实例分析: LIMIT 2, 4 意为跳过前两行(索引 0 和 1),从第三行开始读取,最多读取 4 行。

SELECT * FROM user LIMIT 2, 4;
-- 解释:跳过 ID 1, 2;返回 ID 3, 4, 5, 6。

风险提示: 在超大数据量表中,使用较大的 OFFSET 值会导致严重的性能损耗(需扫描并丢弃大量无用行)。对于深层分页,建议结合主键游标或延迟关联进行优化。

总结

掌握 SELECT 的精确定位、DISTINCT 的组合去重逻辑以及 LIMIT 的分页算法,是编写高效 SQL 的基础。在实际业务中,请养成显式声明列名和使用分页限制的习惯,以保障系统的稳定性和响应速度。

以上就是MySQL之select、distinct、limit的使用详细内容,更多关于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 算法库。