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. Якщо ти порівнюєш масиви, не плутай ці поняття.

Робота з великими масивами.

Зберігання величезної кількості даних у масиві може збільшити час обробки запитів. Використовуй масиви для невеликих обсягів даних.

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ