MySQL 查询实战(三):排序与综合练习

前两篇我们以学生表为例学习了列选择、条件筛选等基础查询技巧,本文将补充查询结果的排序(ORDER BY),并通过 9 个学生场景的实战练习,帮你融会贯通所有知识点,真正掌握 SQL 查询的核心能力。

目录

[一、ORDER BY:查询结果排序](#一、ORDER BY:查询结果排序)

[1. 单列排序](#1. 单列排序)

[2. 多列排序](#2. 多列排序)

二、综合实战练习(附解析)

[练习 1:查询数学成绩超过 95 分的学生姓名和数学成绩](#练习 1:查询数学成绩超过 95 分的学生姓名和数学成绩)

[练习 2:查询学号为 2024001 的学生姓名和班级 ID](#练习 2:查询学号为 2024001 的学生姓名和班级 ID)

[练习 3:查询数学成绩不在 60-80 分之间的学生姓名和数学成绩](#练习 3:查询数学成绩不在 60-80 分之间的学生姓名和数学成绩)

[练习 4:查询班级 ID 为 2 和 4 的学生姓名和班级 ID,按姓名字母顺序升序排序](#练习 4:查询班级 ID 为 2 和 4 的学生姓名和班级 ID,按姓名字母顺序升序排序)

[练习 5:查询数学成绩在 80-95 分且班级 ID 为 1 或 3 的学生,列名自定义为 "学生姓名""数学成绩"](#练习 5:查询数学成绩在 80-95 分且班级 ID 为 1 或 3 的学生,列名自定义为 “学生姓名”“数学成绩”)

[练习 6:查询未填写地址的学生姓名和地址](#练习 6:查询未填写地址的学生姓名和地址)

[练习 7:查询有加分项的学生姓名、数学成绩、加分项,按数学成绩 + 加分项降序排序](#练习 7:查询有加分项的学生姓名、数学成绩、加分项,按数学成绩 + 加分项降序排序)

[练习 8:查询姓名同时包含 "小" 和 "明" 的学生姓名](#练习 8:查询姓名同时包含 “小” 和 “明” 的学生姓名)

[练习 9:查询班级 ID 为 1、3、5,且数学成绩≠80、85、90 的学生姓名、班级 ID 和数学成绩](#练习 9:查询班级 ID 为 1、3、5,且数学成绩≠80、85、90 的学生姓名、班级 ID 和数学成绩)

总结



一、ORDER BY:查询结果排序

排序是查询中高频需求(如按成绩排名),ORDER BY子句需放在 SQL 语句最后,支持单列 / 多列排序,默认升序(ASC),降序需显式指定(DESC)。

1. 单列排序

语法

sql 复制代码
SELECT 列名 FROM 表名 WHERE 条件 ORDER BY 排序列 [ASC/DESC];

示例 1:查询所有学生的姓名和数学成绩,按数学成绩升序排序(ASC 可省略)

sql 复制代码
SELECT st_name, math_score FROM student ORDER BY math_score;
-- 等价写法
SELECT st_name, math_score FROM student ORDER BY math_score ASC;

示例 2:查询所有学生的姓名和总分,按总分降序排序(从高到低)

sql 复制代码
SELECT st_name, (math_score + chinese_score) AS 总分 FROM student ORDER BY 总分 DESC;

2. 多列排序

先按第一列排序,第一列值相同时,按第二列排序,以此类推。

示例:查询学生的班级 ID、数学成绩,先按班级 ID 升序,再按数学成绩降序排序

sql 复制代码
SELECT class_id, math_score FROM student ORDER BY class_id ASC, math_score DESC;

二、综合实战练习(附解析)

以下练习基于student学生表(字段:st_id (学号)、st_name (姓名)、math_score (数学成绩)、chinese_score (语文成绩)、class_id (班级 ID)、address (地址)、bonus (加分项)),涵盖列选择、条件筛选、别名、排序等所有核心知识点。

练习 1:查询数学成绩超过 95 分的学生姓名和数学成绩

sql 复制代码
SELECT st_name, math_score FROM student WHERE math_score > 95;

解析:基础比较条件(>),筛选数学成绩大于 95 的行。

练习 2:查询学号为 2024001 的学生姓名和班级 ID

解析:精准匹配(=),按学号筛选指定学生。

练习 3:查询数学成绩不在 60-80 分之间的学生姓名和数学成绩

sql 复制代码
SELECT st_name, math_score FROM student WHERE math_score NOT BETWEEN 60 AND 80;

解析:反向范围筛选(NOT BETWEEN),排除 60-80 分的学生。

练习 4:查询班级 ID 为 2 和 4 的学生姓名和班级 ID,按姓名字母顺序升序排序

解析:多值匹配(IN)+ 单列排序(ORDER BY),字母排序默认按 ASCII 码升序。

练习 5:查询数学成绩在 80-95 分且班级 ID 为 1 或 3 的学生,列名自定义为 "学生姓名""数学成绩"

sql 复制代码
SELECT st_name AS 学生姓名, math_score AS 数学成绩 FROM student 
WHERE math_score BETWEEN 80 AND 95 AND class_id IN (1,3);

解析:范围筛选(BETWEEN)+ 多值匹配(IN)+ 列别名,多条件用 AND 组合。

练习 6:查询未填写地址的学生姓名和地址

sql 复制代码
SELECT st_name, address FROM student WHERE address IS NULL;

解析:空值判断(IS NULL),筛选地址为空的学生。

练习 7:查询有加分项的学生姓名、数学成绩、加分项,按数学成绩 + 加分项降序排序

sql 复制代码
SELECT st_name, math_score, bonus FROM student 
WHERE bonus IS NOT NULL 
ORDER BY (math_score + bonus) DESC;

解析:非空判断(IS NOT NULL)+ 计算列排序,按最终成绩降序展示。

练习 8:查询姓名同时包含 "小" 和 "明" 的学生姓名

sql 复制代码
SELECT st_name FROM student WHERE st_name LIKE "%小%" AND st_name LIKE "%明%";

解析:模糊匹配(LIKE)+ AND 组合,需同时满足包含 "小" 和 "明"。

练习 9:查询班级 ID 为 1、3、5,且数学成绩≠80、85、90 的学生姓名、班级 ID 和数学成绩

sql 复制代码
SELECT st_name, class_id, math_score FROM student 
WHERE class_id IN(1,3,5) AND math_score NOT IN (80,85,90);

解析:多值匹配(IN)+ 反向多值匹配(NOT IN),组合筛选班级和成绩条件。

总结

  1. 排序(ORDER BY)需放在语句最后,支持单列 / 多列,ASC(升序)可省略,DESC(降序)需显式指定;
  2. 实战查询需注意字段名、条件匹配的准确性,多条件组合优先用 IN/NOT IN 简化语句;
  3. 别名、排序、条件筛选可组合使用,是 SQL 查询的核心组合技巧,结合学生场景练习能快速掌握。

希望这篇文章对你有帮助,如果你有任何问题或建议,欢迎在评论区留言。谢谢阅读(求攒攒 收藏 关注)!

相关推荐
是一个Bug3 分钟前
MongoDB:像搭积木一样存数据
数据库·mongodb
lunzi_082616 分钟前
【学习笔记】《Python编程 从入门到实践》第8章:函数定义、参数传递与模块导入
笔记·python·学习
ULIi096kr20 分钟前
MySQL解决Too many connections报错:连接数爆满排查、优化与永久解决方案
数据库·mysql·adb
SL-staff1 小时前
(一)数据源配置 —— JVS-Rules规则引擎 V2.5 操作说明介绍
数据库·jar·规则引擎·数据源·jvs-rules·api 接口·jvs低代码
李白的天不白1 小时前
服务器上数据库的创建
mysql
ha_lydms1 小时前
AnalyticDB基本概念
mysql·adb·analyticdb
零陵上将军_xdr1 小时前
后端转全栈学习-Day5-JavaScript 基础-3
开发语言·javascript·学习
摇滚侠2 小时前
Spring 零基础入门到进阶 基于 XML 管理 Bean 14-28
xml·数据库·spring
Fanta丶2 小时前
23.MySql group by优化、limit优化、 count优化、update优化
mysql
医疗信息化王工2 小时前
医院自律端系统——预警处置模块全栈实战(ASP.NET Core + Vue3 + Quartz 定时调度)
mysql·postgresql·vue·asp.net core·quartz