MySQL常用SQL语句详解:排序、分组与条件查询实战

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

在MySQL数据库操作中,基础查询往往难以满足复杂的业务需求。本文深入解析常用的高级SQL语句,涵盖结果排序、条件过滤、去重、分组聚合及分页限制等核心操作,配合代码示例与图解,帮助读者快速掌握MySQL数据处理的关键技巧。

基础查询与排序

使用 SELECT 语句从数据库获取数据时,结果集的顺序通常是不可控的。为了得到具有可读性或逻辑性的数据列表,需使用 ORDER BY 子句进行排序。

第1步:配置排序规则(ASC/DESC)

目的:指定查询结果的排列顺序。

操作:在 SELECT 语句末尾添加 ORDER BY 字段名。默认按升序排列(ASC),若需降序则显式声明 DESC。

# 默认升序排序(可省略 ASC)
select name ,score from report order by score;
# 指定降序排列
select name ,score from report order by score desc;

第2步:应用条件过滤并排序

目的:先筛选特定数据,再对结果集排序。

操作:在 ORDER BY 之前使用 WHERE 子句定义过滤条件。注意SQL语法的执行顺序,WHERE 先于 ORDER BY 执行。

select name,score,address from report where address='hangzhou' order by score;

第3步:执行多字段复合排序

目的:当主排序字段的值相同时,按次级字段进一步排序。

操作:在 ORDER BY 后列出多个字段,用逗号分隔。优先级从左至右递减。例如,先按 score2 升序,若相同则按 score 降序排列。

select name,score,score2 from report order by score2,score desc;

条件判断与逻辑组合

在实际业务中,经常需要同时满足或多个条件之一的数据。这可以通过 AND(且)和 OR(或)操作符实现。

第4步:使用 AND/OR 构建多条件查询

目的:精确提取符合特定范围或离散条件的记录。

操作:在 WHERE 子句中连接多个表达式。逻辑上,AND 要求所有条件为真,OR 只需一个条件为真。建议使用括号 () 明确逻辑优先级,避免歧义。

# 成绩在80到90之间(包含边界需视具体业务而定,此处为大于80且小于90)
select name,score,cardid from report where score>80 and score<90;
# 成绩不及格或优秀
select name,score,cardid from report where score<60 or score>90;

第5步:嵌套复杂逻辑

目的:处理“或”与“且”混合的复杂场景。

操作:结合括号使用。例如查询不及格或者分数在70-80之间的学生,并按分数降序查看。

select name,score,cardid from report where score<60 or (score>70 and score<80);
-- 增加排序
select name,score,cardid from report where score<60 or (score>70 and score<=100) order by score desc;

去重与分组统计

第6步:查询不重复记录

目的:消除结果集中完全相同的行。

操作:使用 DISTINCT 关键字置于 SELECT 之后。
注意:如果涉及多个字段,DISTINCT 作用于这些字段的组合(即所有列值都相同才视为重复),而非单个列。

# 查询不重复的字段值
select distinct 字段 from 表名;

第7步:结合聚合函数进行分组

目的:对数据进行分类汇总,如计算各组的总数、平均值等。

操作:使用 GROUP BY 指定分组依据字段,通常搭配 COUNT, SUM, AVG, MAX, MIN 等聚合函数使用。
原则:SELECT 子句中出现的非聚合字段,必须出现在 GROUP BY 子句中。

select 字段,聚合函数 from 表名 group by 字段名;

结果限制与别名

第8步:限制返回行数

目的:用于分页显示或仅获取前N条数据。

操作:使用 LIMIT offset, number。offset 是起始偏移量(从0开始),number 是返回的记录数。省略 offset 则从第一条开始。

语法格式:
select 字段 from 表名 limit [offset,] number

第9步:设置表或列别名

目的:简化长名称引用,提高SQL可读性,或在跨表查询中避免冲突。

操作:使用 AS 关键字(可省略)。列别名在结果集中显示;表别名仅在查询过程中生效,不出现在结果中。

-- 列别名
select 字段 as 字段别名 from 表名
-- 表别名
select 别名.字段 from 表名 as 别名

第10步:使用 AS 创建新表

目的:将查询结果保存为新表结构及数据。

操作:使用 CREATE TABLE 新表 AS SELECT ...。
风险提醒:此操作会覆盖已存在的同名表,执行前请确认数据安全。此外,原表的索引、约束(如外键)通常不会自动复制到新表,仅复制结构和数据。

create table report2 as select * from report;

模糊查询与通配符

第11步:使用 LIKE 进行模式匹配

目的:在不清楚完整字符串的情况下进行模糊搜索。

操作:结合 WHERE 子句和 LIKE 运算符使用两个主要通配符:
- %:代表零个、一个或多个字符。
- _:仅代表单个字符。

-- 示例用法
select * from 表名 where 字段 like '%关键词%';

以上就是MySQL常用高级SQL语句详解的详细内容,更多关于MySQL数据库优化技巧的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表