2/7 SELECT语句:排序(ORDER BY)

本文详细介绍了SQL中的ORDER BY子句,包括如何排序数据、按多个列排序、指定排序方向以及在实际查询中的应用。通过ORDER BY,可以实现对数据库表格的升序或降序排列,甚至对多个列进行复杂排序,帮助用户更有效地获取和展示所需信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

序号说明操作
1排序数据ORDER BY
2按多个列排序,分隔
3指定排序方向降序:DESC 升序(默认):ASC
4ORDER BY结合LIMIT顺序:FROMORDER BYLIMIT

以下为数据库SQLTEST中的三张表,其结构和内容如下:
在这里插入图片描述

1.排序数据

ORDER BY子句取一个或多个列的名字,据此对输出进行排序。

mysql> SELECT Stu_id, Lesson_id
    -> FROM t_score
    -> ORDER BY Lesson_id;
+--------+-----------+
| Stu_id | Lesson_id |
+--------+-----------+
|      1 | L001      |
|      2 | L001      |
|      1 | L002      |
|      3 | L003      |
|      2 | L004      |
|      4 | L005      |
+--------+-----------+

通过非选择列进行排序是完全合法的。

mysql> SELECT Stu_id,Score
    -> FROM t_score
    -> ORDER BY Lesson_id;
+--------+-------+
| Stu_id | Score |
+--------+-------+
|      1 |    90 |
|      2 |    84 |
|      1 |    86 |
|      3 |    85 |
|      2 |    75 |
|      4 |    98 |
+--------+-------+

2.按多个列排序

只要指定列名,列名之间用逗号分开即可;
多个列排序时,排序完全按照所规定的的顺序进行。仅在多个行具有相同的Lesson_id值时才对分数按Score进行排序;如果Lesson_id列中所有的值是唯一的,则不会按Score排序。

mysql> SELECT Stu_id,Lesson_id,Score
    -> FROM t_score
    -> ORDER BY Lesson_id,Score;
+--------+-----------+-------+
| Stu_id | Lesson_id | Score |
+--------+-----------+-------+
|      2 | L001      |    84 |
|      1 | L001      |    90 |
|      1 | L002      |    86 |
|      3 | L003      |    85 |
|      2 | L004      |    75 |
|      4 | L005      |    98 |
+--------+-----------+-------+

3.指定排序方向

数据排序不限于升序排序(从A到Z),这只是默认的排序顺序。还可以使用ORDER BY子句以降序(从Z到A)顺序排序;
为了进行降序排序,必须指定DESC关键字。

mysql> SELECT Stu_id,Lesson_id,Score
    -> FROM t_score
    -> ORDER BY Score DESC;
+--------+-----------+-------+
| Stu_id | Lesson_id | Score |
+--------+-----------+-------+
|      4 | L005      |    98 |
|      1 | L001      |    90 |
|      1 | L002      |    86 |
|      3 | L003      |    85 |
|      2 | L001      |    84 |
|      2 | L004      |    75 |
+--------+-----------+-------+

对多个列进行降序排序:如果想在多个列上进行降序排序,必须对每个列指定DESC关键字;
依据Lesson_id值进行降序,再依据Score值进行默认(升序)排序。

mysql> SELECT Stu_id,Lesson_id,Score
    -> FROM t_score
    -> ORDER BY Lesson_id DESC,Score;
+--------+-----------+-------+
| Stu_id | Lesson_id | Score |
+--------+-----------+-------+
|      4 | L005      |    98 |
|      2 | L004      |    75 |
|      3 | L003      |    85 |
|      1 | L002      |    86 |
|      2 | L001      |    84 |
|      1 | L001      |    90 |
+--------+-----------+-------+

4.ORDER BY结合LIMIT

ORDER BY子句的位置:FROM—ORDER BY—LIMIT;
找出成绩最高的学生。

mysql> SELECT Stu_id,Lesson_id,Score
    -> FROM t_score
    -> ORDER BY Score DESC
    -> LIMIT 1;
+--------+-----------+-------+
| Stu_id | Lesson_id | Score |
+--------+-----------+-------+
|      4 | L005      |    98 |
+--------+-----------+-------+
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值