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













