在 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)排列。