JavaRush /Курсы /SQL SELF /Использование массивов (`ARRAY`)

Использование массивов (`ARRAY`)

SQL SELF
16 уровень , 2 лекция
Открыта

Сегодня мы немного поговорим о массивах — одном из мощных инструментов PostgreSQL, позволяющем хранить список значений одного типа внутри одной колонки. Более подробно мы рассмотрим массивы в следующих уровнях.

Когда говорят "массивы", сразу вспоминаются списки. Вспомните, как вы записываете список покупок перед походом в магазин: яблоки, бананы, молоко, хлеб. В PostgreSQL массив — это аналог такого списка, где можно хранить несколько значений в одном поле, при этом каждое значение принадлежит одному и тому же типу данных. Например, массив чисел, массив текстов, массив дат и т.д.

Приведём несколько примеров.

Массив чисел:

{1, 2, 3, 4}

Массив строк:

{"apple", "banana", "cherry"}

Массив дат:

{2024-10-01, 2024-10-02, 2024-10-03}

Массив позволяет записывать множество значений в одно поле, экономя место в таблице и повышая гибкость запросов.

Зачем нужны массивы? Основные преимущества

Компактное хранение данных: хранение нескольких значений в одном поле. Это особенно полезно для данных, которые логически связаны друг с другом. Например, список тегов для статьи или список оценок студента. Заводить отдельную таблицу для пары тегов?

Удобство выборки: массивы позволяют получать сразу целый список значений из одного поля, а также легко манипулировать отдельными элементами массива.

Производительность: в некоторых сценариях массивы позволяют избежать создания дополнительных таблиц для связанных данных, что может упростить архитектуру базы и ускорить разработку. Что не может не радовать.

Как работать с массивами в PostgreSQL?

Создание массива в SELECT

Для задания массива можно использовать конструктор ARRAY[]. Вот пример:

-- Пример массива чисел
SELECT ARRAY[1, 2, 3, 4];

-- Пример массива строк
SELECT ARRAY['apple', 'banana', 'cherry'];

Слишком просто. Давайте создадим таблицу и попробуем что-то в ней выбрать.

Создание таблицы с массивами

Для начала создадим таблицу, где один из столбцов будет массивом.

id name - VARCHAR(50) subjects - TEXT[]
1 Alex {Математика,Физика}
2 Maria {Химия,Биология,Английский}
3 Peter {Информатика}

Посмотрим, что у нас получилось:

SELECT * FROM students;
id name subjects
1 Alex {Математика,Физика}
2 Maria {Химия,Биология,Английский}
3 Peter {Информатика}

Извлечение данных из массивов

Для извлечения данных из массива PostgreSQL предоставляет несколько функций и операторов.

Извлечение элемента массива

Чтобы получить элемент массива по его индексу, используется квадратные скобки []. Обратите внимание, что нумерация начинается с 1 (а не с 0, как в большинстве языков программирования).

-- Получаем первый предмет у каждого студента
SELECT name, subjects[1] AS первый_предмет FROM students;

И вот такой результат:

name первый_предмет
Alex Математика
Maria Химия
Peter Информатика

Извлечение всей строки массива

Для получения всех элементов массива используется обычный SELECT:

SELECT name, subjects FROM students;

Поиск значений внутри массива

Иногда нам нужно определить, содержит ли массив конкретное значение. Для этого используется оператор ANY.

-- Выбрать студентов, которые изучают "Математику"
SELECT name
FROM students
WHERE 'Математика' = ANY(subjects);

Результат запроса:

name
Alex

В PostgresQL есть очень много функций и операторов для работы с массивами, но о них вы узнаете в будущих уровнях :P

Типичные ошибки при работе с массивами

Смешивание индексации с 0 и 1.

В PostgreSQL индексация массива начинается с 1. Если вы привыкли к языкам вроде Python или JavaScript, это легко может запутать.

Пустые массивы.

Пустой массив {} и NULL — это разные вещи в PostgreSQL. Если вы сравниваете массивы, не путайте эти концепции.

Работа с большими массивами.

Хранение огромного объема данных в массиве может увеличить время обработки запросов. Используйте массивы для небольших объемов данных.

2
Задача
SQL SELF, 16 уровень, 2 лекция
Недоступна
Поиск значений внутри массива
Поиск значений внутри массива
2
Задача
SQL SELF, 16 уровень, 2 лекция
Недоступна
Извлечение первого элемента массива
Извлечение первого элемента массива
Комментарии (1)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Slevin Уровень 1
9 сентября 2025
В PostgreSQL индексация массива начинается с 1. Если вы привыкли к языкам вроде Python или JavaScript, это легко может запутать. Господи, ну за что? 😥😥😥