PostgreSQL Order by 子句

17 Mar 2025 | 6 分钟阅读

在本节中,我们将学习 PostgreSQL ORDER BY 条件,该条件用于按升序或降序对数据进行排序。并且记录是根据一个或多个列提取的。

从表中提取记录时,SELECT 命令以不确定的顺序返回行。为此,我们将在 SELECT 语句中使用 ORDER BY 子句对结果集的行进行排序。

ORDER BY 子句允许我们根据排序表达式按升序或降序对 SELECT 条件返回的行进行排序。

PostgreSQL Order by 子句的语法

PostgreSQL ORDER BY 条件的语法如下

以下是用于上述命令的参数

参数描述
column_list它用于定义我们要检索的列或计算。
table_name它用于描述我们要从中检索记录的表。并且在 FROM 子句中必须至少列出一个表。
WHERE 条件这是一个可选参数,用于定义必须满足的条件以检索记录。
ASC它也是一个可选参数,用于按表达式按升序对结果集进行排序(如果未提供修饰符,则为默认值)。
DESC它也是一个可选参数,用于按表达式按降序对结果集进行排序。

order by 子句以下列格式工作

它从 From 子句 → 开始,之后它将选择特定的列 → 然后执行 Order by 子句。

PostgreSQL Order by clause

注意:在 ORDER BY 子句中,我们可以在 SELECT 命令中使用列别名,因为排序评估。

PostgreSQL ORDER BY 子句的示例

在这里,我们将通过以下示例了解 PostgreSQL ORDER BY 子句的工作原理

为此,我们将使用在 PostgreSQL 教程的前面部分创建的 Employee 表。

以下屏幕截图定义了 Employee 表中存在的不同列

PostgreSQL Order by clause

在上面的表中,我们将使用 order by 子句执行不同类型的运算符

  • 使用 PostgreSQL ORDER BY 子句按一列对行进行排序

在下面的示例中,我们将使用 ORDER BY 条件按员工的 first_name 按升序获取员工

输出

执行上述命令后,我们将获得以下输出,该输出按升序提取所有 first_name

PostgreSQL Order by clause

我们也可以在 ORDER BY 子句中忽略 ASC 选项,因为 ASC 选项是默认的,正如我们在下面的命令中看到的那样

输出

正如我们在下面的屏幕截图中看到的那样,我们得到了与上面类似的输出

PostgreSQL Order by clause

使用 PostgreSQL ORDER BY 子句按降序对行进行排序

以下命令从 Employee 表中选择 first _namelast _name,并按 降序last_name 列中的值获取行

输出

执行上述命令后,我们将获得以下输出,该输出按降序提取所有 first_name

PostgreSQL Order by clause

使用 PostgreSQL ORDER BY 子句按多列对行进行排序

以下命令用于从 employee 表中选择 first_name 和 last_name,并按多列对行进行排序

输出

执行上述命令后,ORDER BY 子句首先按 first_name 列中的值提取行。然后它按 last_name 列中的值提取行。

在下图中,我们还可以看到有两个员工的 first_name (john) 相同,并且 last_name 按降序排序。

PostgreSQL Order by clause

使用 PostgreSQL ORDER BY 子句按表达式排序行

在下面的示例中,我们将选择地址及其长度,该地址按 employee 表中地址的长度获取行

注意:在 PostgreSQL 中,列别名 len 是可访问的,并在 ORDER BY 子句中使用,因为 ORDER BY 子句是在 SELECT 条件之后完成的。并且使用 LENGTH() 函数来获取字符串并获取特定字符串的长度。

输出

执行上述命令后,我们将获得以下结果,该结果描述了 employee 表中 address 列的长度值。

PostgreSQL Order by clause

PostgreSQL ORDER BY 条件和 NULL

当我们提取具有 NULL 值的行时,我们可以使用 ORDER BY 子句的更多 LAST 选项来定义 NULL 的顺序。

在数据库中,NULL 是一种表示,定义了记录丢失或未在记录时未指定。

在上面的语法中,我们有两个选项,它们是最重要的使用选项

选项描述
Nulls First它将 Null 放在其他非空值之前。
Nulls Last它将 Null 放在其他非空值之后。

为了更好地理解,我们将创建一个表,如下所示

执行上述命令后,我们将获得以下消息窗口; demo 表已成功创建。

PostgreSQL Order by clause

创建表后,我们将按如下方式在 demo 表中插入一些值

输出

执行上述命令后,我们将获得以下消息窗口; 已成功插入到 demo 表中。

PostgreSQL Order by clause

注意:在这里,我们不需要理解 CREATE TABLE 和 INSERT 命令,因为我们希望在 pgAdmin 或 psql 中执行命令以创建 *demo* 表并将值插入其中。

以下命令用于从演示表中提取记录

输出

执行上述命令后,我们将获得输出

PostgreSQL Order by clause

在此示例中,我们使用 ORDER BY 条件按 num 列中的升序获取 demo 表中的值,该列将 NULL 放在另一个值之后。因此,如果使用 ASC 选项,则默认情况下 ORDER BY 子句采用 NULLS LAST 选项。

因此,以下命令用于获取类似的结果

输出

实现上述命令后,我们将获得以下结果

PostgreSQL Order by clause

我们将使用 NULLS FIRST 选项将 NULL 放在其他非空值之前,如下所示

输出

执行上述命令后,我们将获得以下结果

PostgreSQL Order by clause

然后,我们将通过以下命令的帮助按降序获取 demo 表中 num 列中的值

输出

一旦我们实现了上述命令,我们将得到以下输出

PostgreSQL Order by clause

执行 ASC 和 DESC 命令后,我们可以看到输出,默认情况下,带 DESC 选项的 ORDER BY 条件使用 NULLS FIRST 选项。

反转顺序

我们将使用 NULLS LAST 选项来反转特定表中的顺序。

输出

执行上述命令后,我们将获得以下结果

PostgreSQL Order by clause

概述

  • 我们在 SELECT 命令中使用 ORDER BY 子句以按特定表中的行提取行。
  • 我们使用 ASC 选项升序获取行,以及使用 DESC 选项以降序提取行。
  • 默认情况下,ORDER BY 条件使用 ASC 函数。
  • 我们使用 NULLS FIRST 和 NULLS LAST 选项来描述 NULL 与其他非空值的顺序。