【MySQL必知必会】:排序检索数据

116 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 3 天,点击查看活动详情

一、前言

大家好,今天文章的内容是:

  • 【如何使用SELECT语句的ORDER BY子句对检索出的数据进行排序】

二、内容

2.1、子句

通常来说,一条 SQL 语句是由若干子句共同构成的。有些子句的是必需的,而有一些则是可选的,并且,一个子句是由关键字以及数据组成。比如语句SELECT DISTINCT 列 FROM 表;中,FROM 表就是一个子句。

下面我们来记录如何使用 ORDER BY 关键字来构成排序子句,将查询到的数据按我们指定的顺序返回。

2.2、使用 ORDER BY

(1)按单个列排序

当我们使用检索语句时,如果不排序,返回的数据则通常以底层表中出现的顺序来显示(比如数据最初添加到表中的顺序)。

我们使用 ORDER BY 子句取一个列的名字,据此来对 SELECT 语句检索出的数据进行排序。

语法如下;

SELECT
    列名
FROM
    表名
ORDER BY
    列名;

注意:

一般来说,ORDER BY子句中使用的列名通常是检索的列,但是我们也可以使用非检索的列进行排序数据,这也是合法的。

举个例子,下面语句用于查询学生表中的姓名以及数学成绩,并按照成绩的高低来将查询到的数据进行排序。

SELECT
    stu_name, math_score
FROM
    tb_students
ORDER BY
    math_score;

(2)按多个列排序

按多个列排序的需求也比较多,比如显示员工信息,可能按姓名排序(首先按姓排序,然后在每个姓中再按名排序)。

如果需要按多个列排序,只需指定列名,多个列名之间用逗号分隔开即可。

比如下面语句将检索三个列,并且按照列1和列2对结果进行排序(首先按列1,然后再按列2,在多个列排序中,排序完全按所规定的顺序进行)。

SELECT1, 列2, 列3
FROM1
ORDER BY1, 列2;

(3)指定排序方向

默认的排序顺序是升序(比如从A到Z),如果需要指定降序排序(比如从Z到A),则可以使用关键字DESC

比如:

SELECT
    列名
FROM
    表名
ORDER BY
    列名 DESC;

如果打算利用多个列排序,则可以这样:

SELECT1, 列2, 列3
FROM1
ORDER BY1 DESC, 列2;

另外需要注意,在上述语句中,DESC 关键字只应用到列1,因此列 1 以降序排序,而 列2 则仍然按照标准的升序排序。也就是说,如果想要在多个列上进行降序排序,必须对每个列指定 DESC 关键字。

备注:

与DESC相反的关键字是ASC,在升序排序时可以指定,但没有多大用处,因为默认下就是升序,即使不指定ASC关键字,也会默认使用。

再举一个例子,下面语句用于找出商品表中最贵物品的值:

SELECT
    p_price
FROM
    products
ORDER BY
    p_price DESC
LIMIT
    1;

分析:

  • ORDER BY p_price DESC 保证行是按照由最昂贵到最便宜检索的;
  • LIMIT 1 则是告诉MySQL仅返回一行。

三、后话

好了,今天的文章内容就到这里,感谢观看。