在 MySQL 中对多列使用 ORDER BY 子句
今天,我们将了解在 MySQL 中使用多列的 ORDER BY
子句。
MySQL 中的 ORDER BY
子句
每当我们使用 SELECT
语句从表中检索数据时,输出中记录(行)的顺序是未指定的。要对其进行排序,我们可以将 ORDER BY
子句与 SELECT
语句结合使用。
使用 ORDER BY
子句,我们可以使用 ASC
(升序)和 DESC
(降序)选项对从一列或多列检索的数据进行升序或降序排序。
如果我们不指定选项(ASC
或 DESC
),ORDER BY
子句使用默认选项 ASC
按升序对数据进行排序。因此,我们使用以下查询得到相同的结果,因为两者是等价的。
#following both queries are equivalent
SELECT selectlist FROM tablename ORDER BY column1;
SELECT selectlist FROM tablename ORDER BY column1 ASC;
我们在 ORDER BY
子句之后只写一列,以使用一列对数据进行排序。否则,写入多个以逗号分隔的列。
请参阅以下代码行。
#sort data in ascending order by using one column
SELECT selectlist FROM tablename ORDER BY column1 ASC;
#sort data in descending order by using multiple columns
SELECT selectlist FROM tablename ORDER BY column1 DESC, column2 DESC;
在 MySQL 中对多列使用 ORDER BY
子句
要学习 ORDER BY
子句的使用,我们必须有一个表。出于这个原因,我们在 db_ms20
数据库中创建了一个名为 tb_students
的表,其中 tb
是表的前缀,db
是数据库的前缀。
这不是强制性的,而是一种很好的方法来区分具有确切名称的表和数据库。
示例代码(创建和填充表 tb_students
):
#create a database
CREATE SCHEMA `db_ms20` ;
#create a table
CREATE TABLE `db_ms20`.`tb_students` (
`ID` INT NOT NULL AUTO_INCREMENT,
`FIRSTNAME` VARCHAR(45) NOT NULL,
`LASTNAME` VARCHAR(45) NOT NULL,
PRIMARY KEY (`ID`));
#insert data into a table
INSERT INTO db_ms20.tb_students (FIRSTNAME, LASTNAME) VALUES
('Thomas', 'Christoper'),
('Thomas', 'Jorge'),
('Mehvish', 'Ashiq'),
('Johny', 'James'),
('Daniel', 'Glass'),
('Debbra', 'Herring'),
('Daniel', 'Costner');
#select all data from the table
SELECT * FROM db_ms20.tb_students;
输出(tb_students
表的数据):
| ID | FIRSTNAME | LASTNAME |
| ---- | --------- | ---------- |
| 1 | Thomas | Christoper |
| 2 | Thomas | Jorge |
| 3 | Mehvish | Ashiq |
| 4 | Johny | James |
| 5 | Daniel | Glass |
| 6 | Debbra | Herring |
| 7 | Daniel | Costner |
让我们使用带有 ASC
和 DESC
选项的 ORDER BY
子句将结果集按升序或降序排序。
示例代码:
SELECT * FROM db_ms20.tb_students ORDER BY FIRSTNAME, LASTNAME;
# we can use the following query as an alternative
# for getting the same output
SELECT * FROM db_ms20.tb_students ORDER BY FIRSTNAME ASC, LASTNAME ASC;
输出:
ORDER BY
子句使用 FIRSTNAME
列按升序对数据进行排序。此外,它使用 LASTNAME
列按升序对已排序的数据进行排序。
值得注意的一点是如何使用多列对数据进行排序。
数据将分两步排序,我们使用两列对数据进行排序。
类似地,我们可以通过在每一列中用 DESC
选项替换 ASC
来按降序对数据进行排序。下面是另一个示例,我们需要按降序对 FIRSTNAME
列和按升序对 LASTNAME
列进行排序。
示例代码:
SELECT * FROM db_ms20.tb_students ORDER BY FIRSTNAME DESC, LASTNAME ASC;
输出:
在这里,ORDER BY
将按如下方式对数据进行排序:
请记住,如果你的数据集中有 NULL
值,那么 NULLS FIRST
(将 non-NULL
值放在 NULL
值之后)和 NULLS LAST
(将 NULL
值放在 non-NULL
值)选项可按如下方式使用:
SELECT selectlist FROM tablename
ORDER BY
column1 [ASC | DESC] [NULLS FIRST | NULLS LAST],
column2 [ASC | DESC] [NULLS FIRST | NULLS LAST];
相关文章
使用 Mysqldump 备份 MySQL 中的数据
发布时间:2023/05/09 浏览次数:192 分类:MySQL
-
本篇文章将介绍如何使用 mysqldump 只备份数据。 在这里,我们将探讨 --no-create-info 、--compact 、--skip-triggers 和 --no-create-db 选项。
更新 MySQL 表中的主键
发布时间:2023/05/09 浏览次数:61 分类:MySQL
-
本篇文章介绍如何更新 MySQL 表中的主键。 我们将使用 ALTER 命令对主键进行任何更改。更新 MySQL 表中的主键 我们可以在多种情况下更新 MySQL 表中的主键。
在 MySQL 中获取命令历史记录
发布时间:2023/05/09 浏览次数:150 分类:MySQL
-
本文重点介绍了在 Windows 和 Linux 中获取我们已执行的 MySQL 命令历史记录的各种方法。MySQL命令历史
Oracle 的 decode 函数在 MySQL 中的等价物
发布时间:2023/05/09 浏览次数:115 分类:MySQL
-
本篇文章介绍了三种替代实现,我们可以将它们用作 MySQL 中 Oracle 的 decode() 函数的等价物。 为此,我们将使用 IF()、CASE 以及 FIELD() 和 ELT() 的组合。
使用 Ubuntu 连接远程 MySQL 服务器的不同方法
发布时间:2023/05/09 浏览次数:97 分类:MySQL
-
在本文中我们将学习如何使用 Ubuntu 连接远程 MySQL 服务器来操作数据以及启动和停止 MySQL 服务器。
在 Linux 中安装 MySQL 客户端
发布时间:2023/05/09 浏览次数:72 分类:MySQL
-
在 Linux 中安装 MySQL 客户端的命令。Linux 和 Unix 等环境作为命令行界面工作,仅在命令的帮助下运行。
在 MySQL 中转换为十进制
发布时间:2023/05/09 浏览次数:150 分类:MySQL
-
有时,我们可能需要将一种数据类型转换为另一种数据类型。 下面是我们如何使用带有 DECIMAL(M,D) 的 CAST() 和 CONVERT() 函数在 MySQL 中转换为十进制。
在 MySQL 中获取当前日期和时间
发布时间:2023/05/09 浏览次数:145 分类:MySQL
-
本篇文章我们将学习 NOW()、CURRENT_TIMESTAMP()(也写为 CURRENT_TIMESTAMP)和 SYSDATE() 来获取 MySQL 中的当前日期和时间。 我们还将看到这三个功能之间的比较。在 MySQL 中获取当前日期和时间
更改 MySQL 服务器中的 max_allowed_packet Size
发布时间:2023/05/09 浏览次数:142 分类:MySQL
-
本篇文章介绍如何更改 MySQL 服务器中的 max_allowed_packet 大小。 为了了解这一点,我们将使用两个操作系统,Windows 10 和 Linux (Ubuntu)。