PostgreSQL Array


PostgreSQL Array

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

什么是 PostgreSQL 数组数据类型?

在PostgreSQL 中,Array 数据类型发挥了重要作用。我们知道,每种数据类型都有其伴随的数组类型,例如字符具有字符[]数组类型,整数具有整数[]数组类型等。

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

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

PostgreSQL Array 数据类型的语法

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

variable_name DATA TYPE[];

PostgreSQL 数组数据类型示例

让我们查看示例以了解PostgreSQL 数组数据类型的工作原理。

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

创建 PostgreSQL 数组表

person_details\表包含各列,如ID,PERSON_NAME和Mobile_numbers,并为MOBILE_NUMBER专栏中,我们使用一维数组包含几个手机号码,一个人可能有。

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

输出

在执行上述命令时,我们将得到以下消息窗口,其中显示person_details\表已成功创建到Organization数据库中。

PostgreSQL 数组

插入 PostgreSQL 数组值

person_details\成功创建表,我们将插入一些值与INSERT命令的帮助。

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

输出

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

PostgreSQL 数组

在上面的插入命令中,我们使用了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 数组

注意:正如我们在上面的命令中看到的,当我们使用花括号{}时,我们使用了单引号 ' ' 将数组括起来,并使用双引号 " " 将文本数组项括起来。

选择 PostgreSQL 数组数据值

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

SELECT person_name, mobile_number  
FROM person_details;

输出

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

PostgreSQL 数组

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

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

SELECT person_name, mobile_number[1]  
FROM person_details;

输出

执行上面的命令,我们将得到下面的结果,它显示了person_details\表中一个人的第一个手机号码

PostgreSQL 数组

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

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

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

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

输出

成功执行上述命令后,我们将得到以下输出,其中显示了超过两个 mobile_numbers 的person_name

PostgreSQL 数组

更改 PostgreSQL 数组

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

下面的命令来更新第二个电话号码大卫·史密斯

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

输出

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

PostgreSQL 数组

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

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

输出

执行完上面的命令后,我们会得到如下消息窗口,它代表了整个数组:

PostgreSQL 数组

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

SELECT person_name, Mobile_number  
FROM person_details  
WHERE id = 4;

输出

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

PostgreSQL 数组

扩展 PostgreSQL 数组数据类型

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

让我们看一个例子来理解我们如何使用unnest()函数扩展数组:

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

SELECT person_name,  
unnest(mobile_number)  
FROM person_details;

输出

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

PostgreSQL 数组

在 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 数组数据类型部分,我们学习了以下主题:

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