数组列基础
创建和读取数组值
数组列基础 是 CoddyKit 上的免费 SQL Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 SQL Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 SQL Academy 课程共包含 4 节课。
什么是数组列
PostgreSQL 支持数组列,允许单个单元格存储多个相同类型的值。与存储逗号分隔的文本不同,数组提供了一个类型明确的列表,您可以使用查询、索引和内置函数对其进行处理。
数组可以存储整数、文本、布尔值、日期或其他任何 PostgreSQL 类型。语法类似于 integer[] 或 text[]。
声明数组列
在编写 CREATE TABLE 语句声明数组列时,可以在任意类型名称后添加 []。下面的表为每篇文章存储一个标签列表。
CREATE TABLE articles (
id serial PRIMARY KEY,
title text NOT NULL,
tags text[]
);插入数组值
插入数组数据时,请使用用单引号括起来的花括号字面量。每个元素之间用花括号内的逗号分隔:'{"sql","database"}'。
您也可以使用第二行所示的 ARRAY[...] 构造语法。
INSERT INTO articles (title, tags) VALUES
('Intro to SQL', '{"sql","beginner"}'),
('Advanced Joins', ARRAY['sql','joins','performance']),
('NULL Handling', '{"sql","nulls","tips"}');读取整个数组
选择数组列的方式与选择其他列完全相同。PostgreSQL 会在结果集中将整个数组作为单个值返回,并以花括号格式显示。
SELECT id, title, tags
FROM articles;访问单个元素
PostgreSQL 中的数组下标从 1 开始(第一个元素的索引是 1,而不是 0)。在列名后使用方括号即可访问指定元素。
SELECT title,
tags[1] AS first_tag,
tags[2] AS second_tag
FROM articles;数组切片
您可以在方括号内使用 lower:upper 切片语法提取一段元素。两个边界都包含在内。
SELECT title,
tags[1:2] AS first_two_tags
FROM articles;使用 ANY 进行筛选
要查找数组包含特定值的行,请使用 = ANY(column) 表达式。只要数组中至少有一个元素与给定值匹配,该表达式就会返回相应的行。
SELECT id, title, tags
FROM articles
WHERE 'joins' = ANY(tags);使用 @> 运算符进行筛选
包含运算符 @> 用于检查左侧数组是否包含右侧数组中的所有元素。当您需要查找包含一组必需标签的行时,这非常有用。
SELECT id, title, tags
FROM articles
WHERE tags @> ARRAY['sql','tips'];获取数组长度
array_length(arr, dimension) 函数返回指定维度上的元素数量。对于一维数组,请将第二个参数设为 1。
SELECT title,
array_length(tags, 1) AS tag_count
FROM articles
ORDER BY tag_count DESC;追加元素
使用 array_append(array, element) 函数或连接运算符 ||,将新元素添加到现有数组列的末尾。
UPDATE articles
SET tags = array_append(tags, 'featured')
WHERE title = 'Intro to SQL';
SELECT title, tags FROM articles WHERE title = 'Intro to SQL';将数组展开为行
unnest(array) 函数会将数组展开为一个行集合,每个元素对应一行。这对于聚合、连接或任何需要分别处理每个元素的操作都很方便。
SELECT title, unnest(tags) AS tag
FROM articles
ORDER BY title, tag;快速检查
测试您对 PostgreSQL 数组列的理解。
回顾:数组列基础
在本课中,您全面学习了 PostgreSQL 数组列的工作方式:
- 在
CREATE TABLE中使用type[]语法声明数组 - 使用花括号字面量或
ARRAY[...]插入值 - 通过从 1 开始的索引访问元素,并使用
lower:upper访问切片 - 使用
= ANY(col)筛选单个值,或使用@>筛选子集 - 使用
array_length(col, 1)测量长度 - 使用
array_append()或||添加元素 - 使用
unnest()将数组展开为行
数组是 PostgreSQL 的一项强大功能。当一组值属于同一个实体时,它可以简化数据库架构。
常见问题解答
「数组列基础」课时是免费的吗?
是的 — 「数组列基础」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 SQL Academy 课程的其余内容,请升级到 CoddyKit PRO。 SQL Academy 课程共包含 4 节课。
「数组列基础」这节课中我会学到什么?
创建和读取数组值 你通过在浏览器中直接运行的动手代码来练习 SQL Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 SQL Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 SQL Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「数组列基础」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 SQL Academy 课中编写并运行代码吗?
能。每节 SQL Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。