MySQL基础:select、distinct与limit语句实战详解
在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查询优化的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













