📅  最后修改于: 2020-11-30 07:47:18             🧑  作者: Mango
在本节中,我们将了解PostgreSQL的数组数据类型的工作,数组数据类型的实例,以及一些访问阵列功能,如UNNEST(),ANY(),这有助于我们更有效地处理数组值。我们还看到了在WHERE子句中使用数组元素的示例。
在PostgreSQL中,Array数据类型起着重要作用。众所周知,每种数据类型都有其伴随的数组类型,例如,字符具有字符[]数组类型, integer具有integer []数组类型,等等。
PostgreSQL允许我们将列指定为任何有效数据类型的数组,其中包括用户定义的数据类型,枚举的数据类型和内置的数据类型。
注意:PostgreSQL在后台生成一致的数组类型,以供我们描述数据类型。
PostgreSQL Array数据类型的语法如下:
variable_name DATA TYPE[];
让我们看一些示例示例,以了解PostgreSQL Array数据类型如何工作。
我们将在CREATE命令的帮助下创建一个新的表作为person_details ,并使用INSERT命令插入一些值。
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表已成功创建到组织数据库中。
成功创建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表中。
注意:如上述命令所示,当使用花括号{}时,我们使用单引号''将数组括起来,并使用双引号“”将文本数组项括起来。
创建并插入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子句中的array元素作为条件。
在以下示例中,我们将使用以下命令来标识将mobile_number(308)-589-23458作为第二个手机号码的那些人:
SELECT person_name
FROM person_details
WHERE mobile_number[2]='(308)-589-23458';
输出量
成功执行上述命令后,我们将获得以下输出,该输出显示具有两个以上mobile_numbers的person_name。
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提供了unnest()函数。
让我们看一个示例,以了解如何使用unnest()函数扩展数组:
在以下示例中,以下命令扩展了mobile_number数组的所有手机号码。
SELECT person_name,
unnest(mobile_number)
FROM person_details;
输出量
执行上述命令后,我们将获得以下输出,该命令将展开的数组显示为行列表。
如果要确定谁具有以下mobile_number (555)-333-5432,而与mobile_number数组的位置无关,则可以使用ANY()函数,如以下命令所示:
SELECT person_name, mobile_number
FROM person_details
WHERE '(555)-333-5432' = ANY (mobile_number);
输出量
执行以上命令后,我们将得到以下结果:
在PostgreSQL数组数据类型部分中,我们学习了以下主题: