Курси баз даних онлайн: що вчити з SQL і в якому порядку
Третій тиждень навчання, запит із JOIN повертає більше рядків, ніж замовлень у базі, а сума виторгу не сходиться ні з чим — так закінчується програма, де теми йшли не в тому порядку. Курси баз даних онлайн дають результат, коли тримаються однієї послідовності: реляційна модель → SELECT → JOIN → GROUP BY і підзапити → віконні функції → проєктування. Нижче — що має бути на кожному кроці, як перевірити програму ще до старту і на якій базі тренуватися безкоштовно.

Що таке курс баз даних і який потрібен вам
Під назвою «курс баз даних» продають три різні речі, і плутанина між ними — головна причина розчарувань.
- Аналітичний SQL. Ви вчитеся читати дані: дістати, відфільтрувати, поєднати таблиці, порахувати метрики. Потрібен аналітикам, маркетологам, продакт-менеджерам і власникам бізнесу.
- Розробка баз даних. До читання додається проєктування: таблиці, ключі, нормалізація, індекси, транзакції. Це шлях бекенд-розробника.
- Адміністрування. Установлення сервера, резервні копії, права доступу, продуктивність. Окрема професія з окремими програмами.
Спільне ядро в усіх трьох — реляційна модель і мова SQL. Це стандарт, який підтримують MySQL, PostgreSQL, SQL Server, Oracle і SQLite, а синтаксис базових запитів у них майже однаковий. Тому перший курс обирайте не за назвою СУБД, а за порядком тем: навичка переноситься, прогалини в логіці — ні.
Курси баз даних онлайн: порядок тем
Кожен крок спирається на попередній. Переставте два сусідні — і наступна тема перетвориться на заучування без розуміння.
| Крок | Тема | Що вмієте після | Де розібрано в нас |
|---|---|---|---|
| 1 | Реляційна модель: таблиці, рядки, первинні й зовнішні ключі | Читаєте схему й бачите, як таблиці повʼязані | Урок про основи SQL (база і СУБД) та урок про JOIN (ключі) |
| 2 | SELECT, WHERE, ORDER BY, LIMIT | Дістаєте й фільтруєте рядки з однієї таблиці | Що таке SQL: основи |
| 3 | JOIN | Збираєте відповідь із кількох таблиць і не плодите дублікатів | SQL JOIN: як поєднати таблиці |
| 4 | GROUP BY, HAVING, підзапити, CASE | Рахуєте метрики по групах | GROUP BY, підзапити та CASE |
| 5 | Віконні функції | Будуєте рейтинги, наростаючі підсумки, порівнюєте рядок із сусіднім | Віконні функції SQL |
| 6 | Проєктування: нормалізація, індекси, транзакції | Створюєте власну схему, а не лише читаєте чужу | Частково: ключі — в уроці про JOIN, схема «зірка» — в уроці про моделювання даних |
Чому проєктування останнє, хоча здається, що з нього треба починати? Бо добру схему проєктує той, хто вже знає, якими запитами її читатимуть. Нормальні форми без досвіду JOIN — це правила без причини, і тримаються вони в голові до першого заліку.
SELECT і JOIN: перевірка одним запитом
Перші три кроки вирішують усе. SELECT із фільтрами дається легко — це майже англійське речення. Складність починається, коли дані лежать у різних таблицях: замовлення в одній, клієнти в другій, а звʼязує їх ключ.
Перевірити себе можна одним запитом. Він рахує виторг завершених замовлень за містами на навчальній базі інтернет-магазину з нашого курсу:
-- Виторг завершених замовлень
-- за містами
SELECT c.city,
COUNT(*) AS orders_cnt,
SUM(o.amount) AS revenue
FROM orders AS o
INNER JOIN customers AS c
ON c.id = o.customer_id
WHERE o.status = 'completed'
GROUP BY c.city
ORDER BY revenue DESC;Якщо можете пояснити кожен рядок — чому JOIN саме за цією парою колонок, що WHERE робить до групування і чому в SELECT лише місто та агрегати, — кроки з першого по четвертий пройдено.
А ось пастка, на якій видно якість курсу. На цій базі виторг завершених замовлень — 912 194. Приєднайте до запиту таблицю позицій замовлення, не змінивши SUM, — і отримаєте 2 124 337: кожне замовлення розмножилося на кількість своїх товарів. Запит виконався без помилки, число просто неправильне. Курс, який не розбирає звʼязок «один до багатьох» на живому прикладі, вчить упевнено рахувати зайве.
GROUP BY, підзапити й віконні функції
GROUP BY відповідає на питання «скільки всього в кожній групі» і при цьому згортає рядки: у запиті вище було 28 завершених замовлень, а стало шість рядків за містами. Віконна функція рахує той самий агрегат, але рядки лишає на місці. У документації PostgreSQL це сформульовано так: віконні функції не змушують рядки групуватися в один вихідний рядок, кожен зберігає власну ідентичність.
-- Завершені замовлення: номер
-- замовлення в клієнта і сума
-- наростаючим підсумком
SELECT customer_id,
order_date,
amount,
ROW_NUMBER() OVER (
PARTITION BY customer_id
ORDER BY order_date, id
) AS order_no,
SUM(amount) OVER (
PARTITION BY customer_id
ORDER BY order_date, id
) AS running_total
FROM orders
WHERE status = 'completed';До кожного замовлення тут додано його порядковий номер у клієнта й суму наростаючим підсумком. Зверніть увагу на id у сортуванні вікна: якщо в клієнта два замовлення в один день, без другого ключа порядок рядків усередині дня не визначений, і номери можуть мінятися від запуску до запуску.
Два практичні орієнтири. Перший: у MySQL віконні функції зʼявилися лише у версії 8.0, тож курс на старішій версії цього кроку просто не дасть. Другий: якщо програма закінчується на GROUP BY, це вступ, а не повний курс SQL — рейтинги, частки й порівняння періодів без вікон перетворюються на громіздкі підзапити.
Проєктування: останній крок, а не перший
Коли запити читаються вільно, настає черга питання «а як ці таблиці зробити самому». Мінімум, який має дати курс:
- Ключі. Первинний ключ однозначно визначає рядок, зовнішній посилається на первинний ключ іншої таблиці. Документація PostgreSQL нагадує: за реляційною теорією первинний ключ має бути в кожної таблиці.
- Нормалізація. Дані розкладають по таблицях так, щоб кожен факт зберігався в одному місці. Для більшості застосунків достатньо третьої нормальної форми — так це описує довідка Microsoft про нормалізацію.
- Індекси. Прискорюють пошук рядків, але додають накладні витрати всій системі, тому їх ставлять обдумано, а не на кожну колонку.
- Транзакції. Кілька кроків обʼєднуються в одну операцію «все або нічого»: переказ не може списатися з одного рахунку й не зарахуватися на інший.
Безкоштовно пройти ці теми можна за офіційним туторіалом PostgreSQL: у ньому є створення таблиць, зовнішні ключі, транзакції й віконні функції. У нашому курсі окремого уроку про нормалізацію, індекси й транзакції немає — він про аналітичний SQL, а не про розробку баз. Зате аналітикам потрібен свій поворот теми: модель «зірка» з таблицями фактів і вимірів, яку ми розбираємо в уроці про моделювання даних.
Як обрати курс: що перевірити в програмі
Програму читайте як договір: чого в ній немає, того не буде й на заняттях.
- Названо СУБД і версію. Просто «SQL» без уточнення — погана ознака: від версії залежить, чи працюватимуть віконні функції.
- Порядок тем збігається з таблицею вище. JOIN до GROUP BY, вікна після групувань, проєктування наприкінці.
- Є наскрізна навчальна база, яку можна завантажити. Приклади на скриншотах без даних не дають практики.
- У кожній темі розібрано типові помилки. NULL у порівняннях, дублікати після JOIN, фільтр у WHERE, який перетворює LEFT JOIN на INNER.
- Завдання мають перевірку або еталонну відповідь. Інакше ви не дізнаєтеся, що запит повертає не те.
- Обіцянку сформульовано як уміння. «Писатимете запити з JOIN і віконними функціями» можна перевірити. «Станете фахівцем за місяць» — ні.
- Перший урок відкривається до оплати. Так видно стиль пояснень і рівень прикладів.
Як практикуватись, щоб SQL не вивітрився
Прочитаний урок ще не навичка. SQL закріплюється лише запитами, які ви написали самі й результат яких перевірили.
- Поставте СУБД або відкрийте пісочницю. Локальний MySQL чи PostgreSQL або онлайн-редактор у браузері — для перших кроків різниці немає.
- Візьміть базу з кількома повʼязаними таблицями. Наша демо-база інтернет-магазину — це чотири таблиці: клієнти, товари, замовлення й позиції замовлень. Дамп розраховано на MySQL 8.0 і новіші.
- Формулюйте питання словами до запиту. «Які три міста дали найбільший виторг за завершеними замовленнями» — і лише потім SELECT.
- Перевіряйте результат другим способом. Порахували виторг за містами — складіть рядки й звірте із загальною сумою без групування. Саме так ловляться дублікати після JOIN.
- Ускладнюйте одну й ту саму задачу. Спершу загальна сума, далі за містами, далі частка міста в загальному виторгу, далі номер замовлення в межах клієнта. Це шлях від другого кроку до пʼятого на одних даних.
Чотири уроки SQL з нашого курсу аналітики даних побудовано саме на цій базі; курс безкоштовний і не потребує реєстрації. Якщо чотирьох уроків замало, у треку Data Analyst Professional мові SQL відведено три модулі з практичним проєктом, який перевіряє SEOWORK.
Часті питання
Так. Офіційний туторіал PostgreSQL пояснює реляційні поняття й мову SQL, а безкоштовний курс SEOWORK містить чотири уроки SQL на навчальній базі інтернет-магазину, без реєстрації. Платний курс має сенс заради перевірки завдань і зворотного звʼязку.
З будь-якої з двох: базові запити в них пишуться майже однаково, тож навичка переноситься. Наш курс побудовано на MySQL 8.0 і новіших; якщо берете старішу версію, перевірте, чи є в ній віконні функції.
Базові запити із SELECT, WHERE та ORDER BY реально освоїти за кілька вечорів практики. Упевнений робочий рівень із JOIN, групуванням і підзапитами зазвичай потребує кількох тижнів регулярних вправ.
Ні. SQL — декларативна мова: ви описуєте, який результат потрібен, а не кроки його отримання. Офіційний туторіал PostgreSQL теж не вимагає досвіду програмування.
Курс SQL вчить писати запити до готової бази. Курс баз даних ширший: до запитів додаються проєктування таблиць, ключі, нормалізація, індекси й транзакції, а в програмах для адміністраторів — ще й обслуговування сервера.
Порядок тем у вас уже є. Лишилося написати перший запит.
Почніть з уроку 1 про основи SQL: він пояснює, що таке база даних і СУБД, і доводить до перших SELECT. Програма всіх уроків — на сторінці курсу аналітики даних.

