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] AS “INT ARRAYS”,
SELECT ARRAY [1,2,3,4] = ARRAY [1,2,3,4],
包含性操作符
SELECT ARRAY [1,2,3,4] @> ARRAY [2,3,4] AS “CONTAINS”,
长度和尺寸
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) AS “USING APPEND”;
SELECT ARRAY_PREPEND(4, ARRAY [1,2,3]) AS “USING 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) as “result”;
SELECT 25 in (1, 2, 3, 20) as “result”;
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]) as “result”
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》杂志上,人们在这里通过强调和回应这个故事来继续对话。