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 查询的核心组合技巧,结合学生场景练习能快速掌握。

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

相关推荐
茅坑的小石头1 小时前
数据库表设计,概念模型、逻辑模型、物理模型的区别,目标、主要内容、所处阶段、面向人群,数据库无关性
数据库
tebukaopu1481 小时前
mysql数据备份还原
数据库·mysql
zyxqyy&∞1 小时前
mysql代码小练-2
数据库·mysql
QiZhang | UESTC1 小时前
学习日记day42
学习
深海潜水员1 小时前
OpenGL 学习笔记 第一章:绘制一个窗口
c++·笔记·学习·图形渲染·opengl
JIngJaneIL2 小时前
基于Java非遗传承文化管理系统(源码+数据库+文档)
java·开发语言·数据库·vue.js·spring boot
+VX:Fegn08952 小时前
计算机毕业设计|基于springboot + vue心理健康管理系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
poemyang2 小时前
像Git一样管理数据:深入解析数据库并发控制MVCC的实现
mysql·事务·mvcc
摇滚侠2 小时前
ElasticSearch 教程入门到精通,文档创建查询修改删除,笔记10、11、12
笔记·elasticsearch