PostgreSQL Order by 子句


PostgreSQL Order by 子句

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

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

ORDER BY子句允许我们通过返回的行进行排序SELECT条件升序或降序顺序取决于排序表达式。

PostgreSQL Order by 子句的语法

PostgreSQL ORDER BY 条件的语法如下:

SELECT column-list    
FROM table_name    
[WHERE condition]    
[ORDER BY column1, column2, .. columnN] [ASC | DESC];

以下是上述命令中使用的参数:

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

该[by子句为了工作在以下格式:

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

PostgreSQL Order by 子句

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

PostgreSQL ORDER BY 子句示例

在这里,我们将借助以下示例了解PostgreSQL ORDER BY子句的工作:

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

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

PostgreSQL Order by 子句

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

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

在下面的示例中,我们将使用 ORDER BY 条件以升序获取员工的名字:

SELECT first_name, last_name  
FROM employee  
ORDER BY first_name ASC;

输出

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

PostgreSQL Order by 子句

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

SELECT first_name, last_name  
FROM employee  
ORDER BY first_name ;

输出

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

PostgreSQL Order by 子句

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

下面的命令从Employee\表中选择第一个 _name最后**一个 _name并按last_name 列中的值按降序**获取行:

SELECT first_name, last_name  
FROM employee  
ORDER BY first_name desc ;

输出

执行上面的命令后,我们会得到下面的输出,获取所有FIRST_NAME递减顺序。

PostgreSQL Order by 子句

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

下面的命令用于从员工\表中选择first_name 和 last_name并对具有多列的行进行排序:

SELECT address, email  
FROM employee  
ORDER BY address ASC, email DESC;

输出

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

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

PostgreSQL Order by 子句

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

在下面的示例中,我们将选择地址及其长度,这将根据员工\表中地址的长度获取行:

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

SELECT address,  
LENGTH (address) len  
FROM employee   
ORDER BY len DESC;

输出

执行上面的命令后,我们会得到下面的结果,它描述了employee\表中address列的长度值。

PostgreSQL Order by 子句

PostgreSQL ORDER BY 条件和 NULL

当我们获取具有 NULL 值的行时,我们可以使用ORDER BY子句的进一步LAST选项定义 NULL 的顺序。

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

ORDER BY sort_expresssion [ASC | DESC] [NULLS FIRST | NULLS LAST]

在上面的语法中,我们有两个最重要的选项:

选项 描述
Nulls First 它将 Null 置于进一步的非空值之前。
Nulls Last 它将 Null 放在另一个非空值之后。

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

CREATE TABLE demo(  
    num varchar  
);

执行上述命令后,我们将得到以下消息窗口;该演示\表已成功创建。

PostgreSQL Order by 子句

创建表后,我们将在演示\表中插入一些值,如下所示:

INSERT INTO demo(num)  
VALUES(1),(2),(null),(3),(4);

输出

执行上述命令后,我们将得到以下消息窗口;该已在成功插入演示\表。

PostgreSQL Order by 子句

注意:这里,我们不需要了解 CREATE TABLE 和 INSERT 命令,因为我们想在 pgAdmin 或 psql 中执行该命令来创建演示表并将值插入其中。

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

SELECT num  
FROM demo  
ORDER BY num;

输出

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

PostgreSQL Order by 子句

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

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

SELECT num  
FROM demo  
ORDER BY num NULLS LAST;

输出

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

PostgreSQL Order by 子句

我们将使用NULLS FIRST选项将NULL放在进一步的非空值之前,如下所示:

SELECT num  
FROM demo  
ORDER BY num NULLS FIRST;

输出

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

PostgreSQL Order by 子句

然后,我们将使用以下命令的帮助以num列中演示表的降序获取值:

SELECT num  
FROM demo  
ORDER BY num DESC;

输出

一旦我们执行了上面的命令,我们将得到以下输出:

PostgreSQL Order by 子句

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

颠倒顺序

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

SELECT num  
FROM demo  
ORDER BY num DESC NULLS LAST;

输出

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

PostgreSQL Order by 子句

概述

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