Shanraq.org Shanraq.org
Зачем нужен SQL: семейный бюджет, которому можно задать вопрос
IT

Зачем нужен SQL: семейный бюджет, которому можно задать вопрос

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

Зачем это нужно

Чеков много, банковских приложений несколько, наличные живут отдельно. В конце месяца простой вопрос «куда ушли деньги?» превращается в вечер с калькулятором. Электронная таблица помогает, пока строк немного и формулы не были случайно сдвинуты. База данных хранит правила вместе с фактами, а SQL формулирует вопрос так, чтобы завтра получить ответ тем же способом.

Данные — отдельные факты: дата покупки, сумма, категория. База данных — организованное хранилище таких фактов. Она нужна, чтобы не только записать сведения, но и надёжно найти, связать, проверить и изменить их. СУБД — программа, которая управляет базой данных. Она принимает команды, следит за ограничениями и не даёт двум действиям незаметно испортить один и тот же факт.

SQL — язык общения с реляционной СУБД. Вместо ручного поиска мы формулируем точный вопрос: «покажи расходы на продукты за сентябрь» или «в каких категориях превышен лимит?». SQL используют разработчики, аналитики, инженеры, бухгалтеры и исследователи. Один и тот же фундамент — таблицы, ключи, фильтры, соединения и агрегаты — пригодится в SQLite, PostgreSQL, MySQL и многих других системах.

Почему начинаем с SQLite

Большим сервисам обычно нужна серверная СУБД: например, PostgreSQL обслуживает одновременно множество пользователей и работает отдельным процессом. Для первого курса такой сервер добавил бы учётные записи, сетевые настройки и администрирование раньше, чем ученик выполнит первый запрос.

SQLite устроен проще: движок работает внутри приложения, а вся база может храниться в одном переносимом файле. Не нужен отдельный сервер, интернет или регистрация. Поэтому внимание остаётся на SQL и модели данных. SQLite применяется в браузерах, телефонах, настольных программах и встроенных устройствах, но это не означает, что на каждом гаджете уже установлен доступный пользователю редактор базы.

В курсе предусмотрены два равноправных пути:

  • на компьютере — официальный интерфейс командной строки sqlite3 и файл budget.db;
  • на смартфоне, планшете или компьютере — SQL-лаборатория Shanraq, где официальный SQLite WebAssembly выполняет запросы локально в браузере.

Лаборатория не отправляет содержимое базы на сервер Shanraq. База живёт в браузере, пока открыта страница; для следующего занятия сохраните её кнопкой резервного копирования, а затем восстановите из файла .sqlite. На общем устройстве не вводите настоящие сведения о семейных финансах.

Мы изучаем переносимое ядро SQL, а особенности SQLite отмечаем отдельно. Позднее переход к PostgreSQL будет означать освоение сервера и его возможностей, а не повторное изучение языка с нуля.

Образ. Таблица — шкаф с подписанными ящиками. SQL — записка кладовщику: какие ящики открыть, что отобрать и как сложить результат. Записка не переставляет вещи, пока вы не попросили об изменении.

Сразу целиком

На телефоне или планшете

Откройте SQL-лабораторию, выберите «Итог месяца» и нажмите «Выполнить». Учебная схема и вымышленные операции уже загружены. Запрос можно менять пальцем прямо в редакторе.

На компьютере в терминале

Установите SQLite, затем из корня проекта выполните:

sqlite3 budget.db
.read course/sql-budget/schema.sql
.read course/sql-budget/seed.sql
.read course/sql-budget/report.sql

Главный запрос отчёта:

SELECT c.kind, SUM(t.amount_tiyn) / 100.0 AS amount_kzt
FROM transactions AS t
JOIN categories AS c ON c.id = t.category_id
WHERE t.happened_on >= '2026-09-01'
  AND t.happened_on <  '2026-10-01'
GROUP BY c.kind;

Результат:

expense|127800.0
income|420000.0

Пока не разбирайте каждое слово. Увидьте целое: FROM называет факты, JOIN присоединяет смысл категории, WHERE ограничивает месяц, GROUP BY собирает группы, SUM считает.

Разбор

Суммы хранятся в тиынах целыми числами. 42000000 — это 420 000,00 ₸. Тип REAL для денег не используем: двоичная дробь не обязана точно представлять десятичные копейки.

Запрос только читает данные. Его можно повторить после добавления новых операций, и правила расчёта останутся видимыми. Это главное отличие от ответа, вручную набранного в ячейке или сообщении.

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

Карта урока

SQL получает проверяемый ответ из фактов

Скажите своими словами

  1. Чем повторяемый запрос надёжнее ручного итога?
  2. Почему деньги хранятся в тиынах?
  3. Какие пять частей вы увидели в готовом запросе?
  4. Чем база данных отличается от СУБД?
  5. Почему для первого курса выбран SQLite, а не серверная база?

Задание

Измените обе границы на октябрь 2026 года. Запустите запрос и объясните, почему он вернул пустой результат, а не ошибку.

Куда это встанет в проекте

Это будущий месячный отчёт. В следующих уроках мы построим таблицы, безопасно добавим факты и разберём каждую строку запроса.

Ответы

Показать ответы

Для октября нужны границы '2026-10-01' и '2026-11-01'. Структура запроса верна, но в базе пока нет строк этого периода, поэтому агрегировать нечего.

Источники

Если вы нашли ошибку или опечатку в тексте статьи, то сообщите нам об этом

Проверить задание

Сначала решите и запустите в VS Code — редактор покажет ошибку на месте. Готовое решение вставьте сюда. Проверяет модель: она укажет на ошибку, но не даст готовый ответ.

Чтобы проверить, нужно войти. Войти

Комментарии (0)

Пока нет комментариев. Будьте первым.