SQL系列:表中的数组

135 阅读2分钟

SQL系列 :表内数组

语法

column_name DATATYPE[] {CONSTRAINT}
INSERT INTO table_array (name, grades)
SELECT name, grades[1]

表中的数组

插入
*对于非文本数据,使用_{value1,value2}或_数组['value1','value2']*
对于文本数据,使用{"value1", "value2"}或数组[value1,value2]

CREATE TABLE teachers
CREATE TABLE teacher1
INSERT INTO teachers (class)
SELECT *

查询

SELECT class[1]
SELECT *
SELECT *

更新

update teachers
SELECT *
update teachers
SELECT *

无尺寸

CREATE TABLE teacher2
INSERT INTO teacher2 (class)
SELECT *
— dimensions doesnt matter

无量纲

SELECT id, class, unnest(class)

多维数组

CREATE TABLE students
INSERT INTO students (name, grade)
SELECT *
SELECT *
SELECT *
SELECT *

阵列与JSONB

阵列的优点

它很容易设置
* 需要的存储空间比jsonb少
* 它有多维支持
* 通过GIN索引,大大加快了查询速度
* PostgreSQL规划器有可能对PostgreSQL数组做出更好的决定,因为它收集了其内容的统计数据,但JSONB却没有。

阵列的劣势

* 它的主要优点是你只限于一种数据类型
* 必须严格遵循数组数据的输入顺序。

JSONB的优点

提供了额外的查询运算符
* 支持索引功能

JSONB的劣势

* 必须将json数据解析为二进制格式
* 写入时速度慢,但读取时速度快
* 不能保持顺序

范围

SELECT INT4RANGE(1, 6) AS “DEFAULT [(“,
SELECT ARRAY [1,2,3] ASINT ARRAYS”,
SELECT ARRAY [1,2,3,4] = ARRAY [1,2,3,4],

包含性操作符

SELECT ARRAY [1,2,3,4] @> ARRAY [2,3,4] ASCONTAINS”,

长度和尺寸

SELECT ARRAY [1,2,3] || ARRAY [4,5,6] AS “COMBINED ARRAY”;
SELECT ARRAY_CAT(ARRAY [1,2,3],
SELECT 4 || ARRAY [1,2,3] AS “ADDING TO ARRAY”;
SELECT ARRAY [1,2,3] || 4 AS “ADDING TO ARRAY”;
SELECT ARRAY_APPEND(ARRAY [1,2,3], 4) ASUSING APPEND”;
SELECT ARRAY_PREPEND(4, ARRAY [1,2,3]) ASUSING APPEND”;
SELECT ARRAY_NDIMS(ARRAY [[1,2,3,4],[1,2,3,4],[1,2,3,4]]) AS “DIMENSIONS”,
SELECT ARRAY_LENGTH(ARRAY [-111,2,3,4], 1);
SELECT ARRAY_UPPER(ARRAY [1,2,3,4000], 1),

位置

SELECT array_position(array [‘jan’,’feb’,’mar’], ‘feb’);
SELECT array_position(array [1,2,2,3,4], 2, 3);
SELECT array_positions(array [1,2,2,3,4], 2);

搜索、替换、删除

SELECT array_cat(array [1,2], array [3,4]);
SELECT array_append(array [1,2,3], 4);
SELECT array_remove(array [1,2,3,4,4,4], 4);
SELECT array_replace(array [1,2,3,4,4,4], 4, 5);

在,不在,任何

SELECT 20 in (1, 2, 3, 20) asresult”;
SELECT 25 in (1, 2, 3, 20) asresult”;
SELECT 25 not in (1, 2, 3, 20) as “result”;
SELECT 20 = all (Array [20,22]), 20 = all (array [20,20]);
SELECT 20 = any (Array [1,2,25]) asresult

STRING TO Array

SELECT string_to_array(‘1,2,3,4,5’, ‘,’);
SELECT string_to_array(‘1,2,3,4,5,ABC’, ‘,’, ‘ABC’);
SELECT string_to_array(‘1,2,3,4,,6’, ‘,’, ‘’);
SELECT array_to_string(ARRAY [1,2,3,4], ‘|’);
SELECT array_to_string(ARRAY [1,2,3,4,NULL], ‘|’, ‘EMPTY’);

更多关于我 :uday-yadav.web.app/


SQL系列:表中的数组》最初发表在《Dev Genius》杂志上,人们在这里通过强调和回应这个故事来继续对话。