Skip to content

Latest commit

 

History

History
110 lines (81 loc) · 7.24 KB

File metadata and controls

110 lines (81 loc) · 7.24 KB

SQL за місяць 🐘

English · Українська

Вивчіть основи SQL та PostgreSQL приблизно за 4 тижні так, як їх опановують насправді — пишучи запити. 20 практичних, керованих тестами блоків із запускними прикладами та перевіреними еталонними розв'язками.

PostgreSQL TypeScript Tested with Vitest License: MIT

Безкоштовний курс для розробників, які пишуть код, але так і не вивчили 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

Рекомендований порядок роботи над блоком

  1. Прочитайте README.md блоку.
  2. Відкрийте sql/examples.sql, прочитайте й запустіть його:
    npm run play blocks/01-getting-started/sql/examples.sql
  3. Відкрийте sql/exercises.sql і виконайте кожен -- TODO-запит (лишайте рядок -- name: без змін).
  4. Запускайте тести блоку, доки всі не стануть зеленими:
    npx vitest blocks/01-getting-started
  5. Заглядайте в 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 хв? Прочитайте розв'язок, зрозумійте його й перепишіть з пам'яті.

Щасливих запитів! 🐘