MySQL知识学习——第五天:排序检索数据

本文介绍了SQL中的ORDER BY子句用于对检索数据进行排序,详细讲解了升序和降序排列,以及多列排序的规则。通过实例展示了如何根据不同的列进行排序,并强调了子句的顺序重要性,ORDER BY子句必须紧跟在FROM子句之后,LIMIT关键字则需置于ORDER BY之后。
摘要由CSDN通过智能技术生成

前言

第五天,冲鸭~

我们昨天知道怎么检索数据了,借助select语句,我们可以对数据检索,但是昨天提到了,返回的数据是没有排序的。今天我们将学习如何排序检索数据,也就是说检索后的数据是排过序的。

子句

先回顾一下select语句的用法

SELECT
	chinese 
FROM
	grade 

除了select语句之外,还有from语句,我们把from语句叫做子句。

子句(clause) SQL语句由子句构成,有些子句是必需的,而有的是可选的。一个子句通常由一个关键字和所提供的数据组成。

上面的from子句就是必须的。

ORDER BY子句

首先了解一下ORDER BY子句,我们将借助这个子句来对数据进行排序(默认是升序排序)

先看一个例子

SELECT
	chinese 
FROM
	grade 
ORDER BY
	chinese

解释:它与之前的例子相比多了ORDER BY子句,它的意思是从grade表中选择Chinese列,输出的结果按Chinese 列升序排列。

ORDER BY子句后面跟一个或者多个列名,上面的例子就是按一个列排序。

问题来了,上面的例子中,我检索的是chinese列,我排序的是也是chinese列,是不是ORDER BY子句的用法就是这样的呢?其实不是的,尽管通常情况下,ORDER BY子句后面跟的列名与检索的列名会保持一致,但是不一致也是合理的

我们看这个例子,下面的例子就是检索的列和排序的列不一样,那结果为啥是这样的呢?

在这里插入图片描述
我们来看原来的表,我们知道是按math列排序的,第三条记录的math值最小,所以我们检索后的结果第一行是94(也就是第三条记录的chinese列的值)
在这里插入图片描述

多列排序

前面我们提到
ORDER BY子句后面跟一个或者多个列名,我们考虑后面跟多个列的情况,也就是按多列排序,看下面的例子

在这里插入图片描述
特别注意多列排序的原则,他是先按照Chinese列排序,如果存在两个相同的值(比如第四条,第五条chinese列的值相同),就按math列排列(同样是按降序排列,只排列重复的那几行),如果第二列也有重复的,则按第三列排列,依次类推。若第一列排列没有重复的,就只按第一列排列,不管后面的。

总结如下,多列排序遵从如下规律
1、按第一列排序,若第一列没有重复记录,则结束;若存在重复记录,进行第二步
2、对重复的记录,按第二列排序,若重复,按第三列排列,重复第一步,若没有,则结束
3、若所有列都排序,则结束

指定排序方向

降序排列

前面不管是多列还是单列,都是升序排列,那么我想降序排列怎么办呢?

这时候就需要借助关键字DESC

在这里插入图片描述
用法是在列名后面加上关键字DESC,就可以实现降序排列,若不加,则默认的是升序排列。

关键字DESC,只作用到它前面的那一列,什么意思呢?
在这里插入图片描述
这个例子的意思是,先按第一列,升序排列,重复行按第二列降序排列,显然,DESC没有作用到chinese列。

注意与我们之前学习的关键字DISTINCT(作用于所有)的区别。

如果要对每一列都实现降序排列,则需要在每一列后面都加关键字DESC
在这里插入图片描述

升序排列

升序排列的关键字是ASC,用法与DESC类似,但是用它的意义不大,因为默认就是升序排列。

综合应用

我们昨天学习了LIMIT的用法,那么现在来尝试解决一个实际问题
就是我现在需要选择数学分数最高的那条记录(假定这条记录只有一条),怎么实现呢
在这里插入图片描述

还有一些实际例子,比如牛客网的一些习题可以尝试做,又或者选择英语最低分的记录,快去试试吧?

这里要强调的是子句的顺序问题**,order by子句必须在from子句后面,关键字limit又必须在order by子句后面。**顺序颠倒会出现错误

后面我们会学习更多的子句,要记住order by子句必须是SQL语句中的最后一条子句。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值