English · Українська
Вивчіть основи SQL та PostgreSQL приблизно за 4 тижні так, як їх опановують насправді — пишучи запити. 20 практичних, керованих тестами блоків із запускними прикладами та перевіреними еталонними розв'язками.
Безкоштовний курс для розробників, які пишуть код, але так і не вивчили SQL як слід. Ви не читаєте про джойни — ви пишете справжні запити, робите «червоні» тести «зеленими» й бачите, як вони виконуються на справжньому Postgres.
- 🧪 Керований тестами — кожен блок постачається з тестами, що падають; ваш запит робить їх зеленими. Жодного пасивного читання.
- 🐘 Справжній Postgres без налаштувань — тести працюють на вбудованому PostgreSQL (PGlite), тож немає ні Docker, ні встановлення сервера.
- ✅ Перевірені розв'язки — кожен еталонний розв'язок сам покритий тестом (
npm run test:solutions), тож те, з чим ви порівнюєте, гарантовано правильне. - 🧠 Пояснюйте, що пишете — окремі блоки про
EXPLAIN ANALYZE, індекси й транзакції: ви розумієте чому запит швидкий чи коректний, а не лише що він пройшов. - 📦 Практичний фінал — віконні функції, JSONB, нормалізація, безпечний виклик SQL із TypeScript і повноцінний капстоун із проєктування схеми.
# 1. Клонуйте репозиторій
cd sql-learn
# 2. Встановіть залежності (Node.js 18+)
npm install
# 3. Запустіть усі тести — більшість падає, доки ви не напишете запити
npm test
# 4. Працюйте над одним блоком за раз, перезапускаючи на збереженні
npx vitest blocks/01-getting-started- Прочитайте
README.mdблоку. - Відкрийте
sql/examples.sql, прочитайте й запустіть його:npm run play blocks/01-getting-started/sql/examples.sql
- Відкрийте
sql/exercises.sqlі виконайте кожен-- TODO-запит (лишайте рядок-- name:без змін). - Запускайте тести блоку, доки всі не стануть зеленими:
npx vitest blocks/01-getting-started
- Заглядайте в
solutions/лише після того, як спробували самі.
Кожен блок працює з тією ж посіяною схемою (
db/schema.sql,db/seed.sql) — маленький магазин ізcustomers,products,ordersтаorder_items.
blocks/NN-topic/
├── README.md # тема з прикладами й переліком вправ
├── sql/examples.sql # запускні розібрані запити
├── sql/exercises.sql # запити-вправи із заготовками -- TODO — ваша робота
├── tests/ # автотести (Vitest), що виконують ваш SQL і перевіряють результат
└── solutions/ # еталонні розв'язки (спершу спробуйте самі!)
Повний план по днях — у PLAN.uk.md. Двадцять блоків за чотири тижні:
| Тиждень | Тема | Блоки |
|---|---|---|
| 1 | Запити | 01 Старт · 02 SELECT і фільтрація · 03 Оператори й вирази · 04 Сортування й пагінація · 05 Типи даних і NULL |
| 2 | Поєднання даних | 06 Агрегація · 07 GROUP BY і HAVING · 08 Join — INNER · 09 Join — OUTER і self · 10 Підзапити й CTE |
| 3 | Схема й швидкість | 11 Створення таблиць (DDL) · 12 Обмеження й ключі · 13 INSERT / UPDATE / DELETE · 14 Індекси й EXPLAIN · 15 Транзакції й ізоляція |
| 4 | Практичний SQL | 16 Віконні функції · 17 Розширений Postgres (JSONB/масиви) · 18 View й нормалізація · 19 SQL із TypeScript · 20 Капстоун |
| Команда | Що робить |
|---|---|
npm test |
Запустити тести всіх блоків (ваш прогрес). |
npm run test:solutions |
Перевірити, що всі еталонні розв'язки проходять. |
npm run play <file.sql> |
Виконати будь-який .sql-файл на свіжій посіяній БД. |
npx vitest blocks/NN-... |
Запустити/стежити за одним блоком. |
Кожен тест піднімає свіжу, посіяну базу PostgreSQL, виконує SQL із exercises.sql
і перевіряє повернуті рядки. Правильний запит робить тест зеленим. Мета не лише в
проходженні тестів — а в SQL, який ви розумієте й можете захистити на код-рев'ю
чи співбесіді.
- Комітьте після кожного блоку (
git commit -m "block 08 done"). - Не пропускайте README — вправи припускають, що ви їх прочитали.
- Для кожного запиту, що проходить, питайте себе: «Який індекс він використає? Що буде на 10 млн рядків?»
- Застрягли на ~15 хв? Прочитайте розв'язок, зрозумійте його й перепишіть з пам'яті.
Щасливих запитів! 🐘