📜  PostgreSQL数组

📅  最后修改于: 2020-11-30 07:47:18             🧑  作者: Mango

PostgreSQL阵列

在本节中,我们将了解PostgreSQL的数组数据类型的工作数组数据类型实例,以及一些访问阵列功能,如UNNEST(),ANY(),这有助于我们更有效地处理数组值我们还看到了在WHERE子句中使用数组元素的示例。

什么是PostgreSQL数组数据类型?

PostgreSQL中,Array数据类型起着重要作用。众所周知,每种数据类型都有其伴随的数组类型,例如,字符具有字符[]数组类型, integer具有integer []数组类型,等等。

PostgreSQL允许我们将列指定为任何有效数据类型的数组,其中包括用户定义的数据类型,枚举的数据类型和内置的数据类型

注意:PostgreSQL在后台生成一致的数组类型,以供我们描述数据类型。

PostgreSQL数组数据类型的语法

PostgreSQL Array数据类型的语法如下:

variable_name DATA TYPE[];

PostgreSQL数组数据类型的示例

让我们看一些示例示例,以了解PostgreSQL Array数据类型如何工作。

我们将在CREATE命令的帮助下创建一个新的表作为person_details ,并使用INSERT命令插入一些值。

创建一个PostgreSQL数组表

person_details表包含各种列,例如id,person_name和Mobile_numbers,对于Mobile_number列,我们使用一维数组,其中包含一个人可能拥有的多个Mobile号码。

CREATE TABLE person_details (
    id serial PRIMARY KEY,
    person_name VARCHAR (200) ,
    mobile_numbers TEXT []
);

输出量

执行上述命令后,我们将获得以下消息窗口,该窗口显示person_details表已成功创建到组织数据库中。

插入PostgreSQL数组值

成功创建person_details表后,我们将在INSERT命令的帮助下向其中插入一些值。

INSERT INTO person_details (person_name, mobile_number)
VALUES('Maria Smith',ARRAY [ '(444)-333-1234','(555)-333-5432' ]);

输出量

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

在上面的插入命令中,我们使用了ARRAY构造函数来创建一个数组并将其添加到Person_details表中。

而且我们也可以使用花括号{}代替方括号[],如下面的命令所示:

INSERT INTO person_details (person_name, mobile_number)
VALUES('Mike Taylor','{"(444)-333-1234"}'),
('Emma Garcia','{"(568)-333-5678"}'),
('David Smith','{"(444)-333-7658","(308)-589-23458"}');

输出量

执行上述命令后,我们将获得以下消息窗口,该窗口显示三个值已成功插入person_details表中。


注意:如上述命令所示,当使用花括号{}时,我们使用单引号''将数组括起来,并使用双引号“”将文本数组项括起来。

选择PostgreSQL数组数据值

创建并插入person_details表的值之后,我们将使用SELECT命令返回person_details表的所有行:

SELECT person_name, mobile_number
FROM person_details;

输出量

成功执行上述命令后,我们将获得以下输出,该输出显示person_details表中存在的所有数据:

默认情况下,如果我们在方括号[]中使用下标访问数组元素,则PostgreSQL对数组元素使用基于一个的编号,这意味着第一个数组元素以数字1开头。

假设我们需要返回此人的姓名和第一个mobile_number ,如下面的命令所示:

SELECT person_name, mobile_number[1]
FROM person_details;

输出量

执行上述命令后,我们将获得以下结果,该结果显示person_details表中某个人的第一个手机号码。

使用where子句查找PostgreSQL数组元素

要过滤行,我们可以使用WHERE子句中的array元素作为条件。

在以下示例中,我们将使用以下命令来标识将mobile_number(308)-589-23458作为第二个手机号码的那些人:

SELECT person_name
FROM person_details
WHERE mobile_number[2]='(308)-589-23458';

输出量

成功执行上述命令后,我们将获得以下输出,该输出显示具有两个以上mobile_numbers的person_name。

更改PostgreSQL数组

PostgreSQL提供给我们更新整个数组或数组的所有元素。

以下命令用于更新David smith的第二个电话号码

UPDATE person_details
SET mobile_number [2] = '(308)-859-54378'
WHERE ID = 4;

输出量

执行完上述命令后,我们将获得以下消息窗口,该窗口显示特定值已成功更新。

要整体更新数组,可以使用以下命令:

UPDATE person_details
SET mobile_number = '{"(308)-859-54378"}'
WHERE ID = 4;

输出量

执行完上述命令后,我们将获得以下消息窗口,该窗口代表整个数组:

之后,我们将使用以下命令;我们将借助SELECT命令检查更新后的值:

SELECT person_name, Mobile_number
FROM person_details
WHERE id = 4;

输出量

成功执行上述命令后,我们将获得以下输出,其中显示指定的更新值。

展开PostgreSQL数组数据类型

为了将数组扩展为行列表,PostgreSQL提供了unnest()函数。

让我们看一个示例,以了解如何使用unnest()函数扩展数组:

在以下示例中,以下命令扩展了mobile_number数组的所有手机号码。

SELECT person_name,
unnest(mobile_number)
FROM person_details;

输出量

执行上述命令后,我们将获得以下输出,该命令将展开的数组显示为行列表。

在PostgreSQL数组中搜索

如果要确定谁具有以下mobile_number (555)-333-5432,而与mobile_number数组的位置无关,则可以使用ANY()函数,如以下命令所示:

SELECT person_name, mobile_number
FROM person_details
WHERE '(555)-333-5432' = ANY (mobile_number);

输出量

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

总览

PostgreSQL数组数据类型部分中,我们学习了以下主题:

  • PostgreSQL数组数据类型用于存储指定列的数组值。
  • 我们已使用WHERE子句中Array元素来过滤指定表中的检索行。
  • 我们使用了不同的Array函数;例如, ANY()函数用于在PostgreSQL数组中搜索。
  • unnest()函数用于将数组扩展为处理特定表的Array值的行列表。