
Зачем нужен 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 для денег не используем: двоичная дробь не обязана точно представлять десятичные копейки.
Запрос только читает данные. Его можно повторить после добавления новых операций, и правила расчёта останутся видимыми. Это главное отличие от ответа, вручную набранного в ячейке или сообщении.
Границы месяца записаны полуоткрытым интервалом: от первого дня включительно до первого дня следующего месяца исключительно. Такой фильтр работает и тогда, когда позднее дата станет временем с часами и минутами.
Карта урока
Скажите своими словами
- Чем повторяемый запрос надёжнее ручного итога?
- Почему деньги хранятся в тиынах?
- Какие пять частей вы увидели в готовом запросе?
- Чем база данных отличается от СУБД?
- Почему для первого курса выбран SQLite, а не серверная база?
Задание
Измените обе границы на октябрь 2026 года. Запустите запрос и объясните, почему он вернул пустой результат, а не ошибку.
Куда это встанет в проекте
Это будущий месячный отчёт. В следующих уроках мы построим таблицы, безопасно добавим факты и разберём каждую строку запроса.
Ответы
Показать ответы
Для октября нужны границы '2026-10-01' и '2026-11-01'. Структура запроса верна, но в базе пока нет строк этого периода, поэтому агрегировать нечего.
Источники
Если вы нашли ошибку или опечатку в тексте статьи, то сообщите нам об этом
Комментарии (0)
Войдите, чтобы оставить комментарий →
Пока нет комментариев. Будьте первым.