深入理解 MySQL ORDER BY 子句

在 MySQL 中,

ORDER BY 子句用于将结果集按照升序或降序进行排列。默认情况下,
ORDER BY 会以
升序对显示的数据进行排序。如果我们希望数据按降序显示,则需要配合使用
DESC 关键字和
ORDER BY 子句。

在进行数据分析时,排序后的数据可以为我们节省大量时间,而 ORDER BY 子句正是实现这一目标的关键。它能够以一种非常有意义的方式组织显示的数据,非常实用。

MySQL 中的

ORDER BY 子句是一个强大的工具,它允许我们根据一个或多个列,将查询的
结果集按升序或降序排列。

当我们需要按特定顺序检索数据时,它是数据库查询中不可或缺的一部分。在本文中,我们将深入探讨 MySQL ORDER BY 关键字的语法和用法。

语法:

SELECT column1, column2, ...
FROM table
ORDER BY column1 [ASC | DESC], column2 [ASC | DESC], ...;

其中,

  • ASC (默认): 将结果集按升序排序。
  • DESC: 将结果集按降序排序。

演示数据库

在接下来的 ORDER BY 示例中,我们将使用下表。

!mysql table表 – 示例数据表

如果想在您自己的系统中使用这张表,请编写以下 MySQL查询语句:

创建表:

CREATE TABLE geeksforgeeks(
  user_id varchar(100) PRIMARY KEY,
  name varchar(100),
  rank int,
  courses_enrolled int,
  questions_solved int
 );

向表中插入数据:

INSERT INTO geeksforgeeks(user_id,name,rank,courses_enrolled,questions_solved)
VALUES(‘vish3001‘,‘Vishu‘,01,10,150);

INSERT INTO geeksforgeeks(user_id,name,rank,courses_enrolled,questions_solved)
VALUES(‘neeraj119‘,‘Neeraj‘,02,09,125);

INSERT INTO geeksforgeeks(user_id,name,rank,courses_enrolled,questions_solved)
VALUES(‘ayush105‘,‘Aayush‘,03,08,110);

INSERT INTO geeksforgeeks(user_id,name,rank,courses_enrolled,questions_solved)
VALUES(‘sumit85‘,‘Sumit‘,04,07,100);

INSERT INTO geeksforgeeks(user_id,name,rank,courses_enrolled,questions_solved)
VALUES(‘harsh05‘,‘Harsh‘,05,06,95);

ORDER BY 子句示例

现在让我们通过一些示例来看看 ORDER BY 子句的实际应用,并理解它在不同场景下的工作原理。

示例 1:使用 ASC/DESC 属性的 ORDER BY 子句

我们可以使用

ASC 属性进行升序排序,使用
DESC 属性进行降序排序。这两个都是 ORDER BY 子句非常有用的属性。

  • 使用 ASC 属性

情况 1: 让我们将表中显示的数据按
"courses enrolled"(已注册课程)列进行升序排序。这次我们将明确使用
ASC 关键字配合
ORDER BY 子句。

#### 查询语句:

SELECT * from 
geeksforgeeks ORDER BY courses_enrolled ASC;

输出结果:

!order by with asc attribute结果 – 情况 01

解释: 该查询从 INLINECODE7380bce9 表中检索所有列,并基于 INLINECODE070df76d 列按升序对结果进行排序。注册课程较少的行会排在前面,随之是注册课程较多的行。

  • 使用 DESC 属性

情况 2: 让我们再次对
courses enrolled 列进行排序,但这次我们将按降序显示数据。

#### 查询语句

SELECT * FROM 
geeksforgeeks ORDER BY courses_enrolled DESC;

#### 输出结果:

!order by with desc attribute结果 – 情况 02

解释: 该查询从 INLINECODEaae190ad 表中检索所有列,并基于 INLINECODEb5a4c5d7 列按降序对结果进行排序。注册课程较多的行会排在前面,随之是注册课程较少的行。

示例 2:多列排序的 ORDER BY 子句

在这个例子中,我们将在单个查询中针对多个列实现

ORDER BY 子句。

在开始之前,为了更清楚地理解多列排序的工作原理,我们将向表中添加一些具有相同排名(rank)的数据。

#### 查询语句:

INSERT INTO geeksforgeeks(user_id,name,rank,courses_enrolled,questions_solved)
VALUES(‘vaibhav455‘,‘Vaibhav‘,05,08,110);

INSERT INTO geeksforgeeks(user_id,name,rank,courses_enrolled,questions_solved)
VALUES(‘karan565‘,‘Karan‘,05,07,100);

现在让我们执行针对多列的

ORDER BY 子句查询。

#### 查询语句:

SELECT * FROM geeksforgeeks
ORDER BY rank, name desc;

#### 输出结果:

!<a href="https://media.geeksforgeeks.org/wp-content/uploads/20240105130401/orderbymultiple_columns.PNG">orderby clause with multiple columns结果 – 多列排序

解释: 在这里,我们首先依据 INLINECODE59fd2e89 列对数据进行了升序排列(默认)。然后,对于 INLINECODEf6cf1680 值相同的行(例如值为 05 的两行数据),我们进一步依据 **name** 列进行了降序(DESC)排列。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。如需转载,请注明文章出处豆丁博客和来源网址。https://shluqu.cn/42502.html
点赞
0.00 平均评分 (0% 分数) - 0