📜  PostgreSQL Order by子句

📅  最后修改于: 2020-11-30 09:03:14             🧑  作者: Mango

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];  

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

Parameter Description
column_list It is used to define the columns or calculations, which we want to retrieve.
table_name It is used to describe the tables that we want to retrieve records from. And there must be at least one table listed in the FROM clause.
WHERE conditions It is an optional parameter used to define the condition that must be fulfilled to retrieve records.
ASC It is also an optional parameter, and it is used to sort the result set in ascending order by expression (default, if no modifier is the provider).
DESC It is also an optional parameter, and it is used to sort the result set in descending order by expression.

order by子句以以下格式工作:

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


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

PostgreSQL ORDER BY子句的示例

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

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

下面的屏幕快照定义了Employee表中存在的不同列:

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

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

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

SELECT first_name, last_name
FROM employee
ORDER BY first_name ASC;

输出量

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

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

SELECT first_name, last_name
FROM employee
ORDER BY first_name ;

输出量

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

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

下面的命令从Employee表中选择名字_和姓氏_ ,并按降序按last_name列中的值获取行:

SELECT first_name, last_name
FROM employee
ORDER BY first_name desc ;

输出量

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

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

以下命令用于从employee表中选择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子句按表达式对行进行排序

在下面的示例中,我们将选择地址及其长度,这将通过employee表中的地址长度来获取行:

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

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

输出量

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

PostgreSQL ORDER BY条件和NULL

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

在数据库中, NULL是一种表示形式,它定义缺少的记录或在记录时未指定的记录。

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

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

Options Description
Nulls First It places Null before further non-null values.
Nulls Last It places Null after another non-null value.

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

CREATE TABLE demo(
    num varchar
);

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

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

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

输出量

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


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

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

SELECT num
FROM demo
ORDER BY num;

输出量

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

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

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

SELECT num
FROM demo
ORDER BY num NULLS LAST;

输出量

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

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

SELECT num
FROM demo
ORDER BY num NULLS FIRST;

输出量

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

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

SELECT num
FROM demo
ORDER BY num DESC;

输出量

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

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

颠倒顺序

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

SELECT num
FROM demo
ORDER BY num DESC NULLS LAST;

输出量

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

总览

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