PostgreSQL Array PostgreSQL hstore PostgreSQL 用户定义的数据类型 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 数组值 当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 子句中的数组元素作为条件。 在下面的示例中,我们将使用以下命令来识别那些将mobile_number (308)-589-23458作为第二个手机号码的人: SELECT person_name FROM person_details WHERE mobile_number[2]='(308)-589-23458'; 输出 成功执行上述命令后,我们将得到以下输出,其中显示了超过两个 mobile_numbers 的person_name。 更改 PostgreSQL 数组 PostgreSQL 为我们提供更新整个数组或数组的所有元素。 下面的命令来更新第二个电话号码的大卫·史密斯。 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()函数是用于扩展的阵列,以用于处理该特定表的阵列值的行的列表。 PostgreSQL hstore PostgreSQL 用户定义的数据类型