0Pricing
SQL Academy · 课时

数组列基础

创建和读取数组值

数组列基础 是 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 反馈 — 无需本地设置。

此课程中的所有课时

  1. 数组列基础
  2. 在数组中搜索
  3. UNNEST 与聚合
  4. 数组与规范化表对比
← 返回 SQL Academy