Книга «Изучаем SQL. Генерация, выборка и обработка данных» написана Аланом Болье, третье издание вышло в 2021 году на русском языке в издательстве Диалектика. Это практическое руководство по языку SQL, охватывающее полный цикл работы с реляционными базами данных от базовых запросов до продвинутых техник вроде аналитических функций, секционирования и работы с большими объемами данных. Автор фокусируется на трех основных СУБД: MySQL, Oracle Database и SQL Server, показывая различия в реализации SQL-функциональности на разных платформах.
Книга решает проблему фрагментарного понимания SQL, когда разработчики знают базовые SELECT-запросы, но не владеют систематическим подходом к проектированию схем, оптимизации производительности и использованию продвинутых возможностей языка. Болье выстраивает знания от фундамента реляционной модели до прикладных техник работы с метаданными, транзакциями и аналитикой. Каждая глава заканчивается упражнениями для закрепления материала.
Целевая аудитория — разработчики приложений, работающих с базами данных, администраторы БД, аналитики данных от начального до среднего уровня. Книга не требует предварительного знания SQL, начинается с основ реляционной модели и постепенно усложняется. Предполагается базовое понимание программирования и опыт работы с командной строкой для установки MySQL и выполнения примеров.

Обложка книги «Изучаем SQL. Генерация, выборка и обработка данных»
Ключевые аспекты
Базой изложения служит реляционная модель данных, где информация структурирована в таблицы со связями между ними, а язык SQL предоставляет декларативный способ манипуляции этими данными.
1. Реляционная модель и основы SQL
Болье начинает с теории: реляционная модель организует данные в таблицы с уникальными строками, идентифицируемыми первичными ключами, и связями через внешние ключи. Нормализация разделяет данные на логически связанные таблицы, устраняя избыточность. Первая, вторая и третья нормальные формы последовательно удаляют дублирование и зависимости.
SQL классифицируется на три группы инструкций:
- Язык схемы данных (CREATE, ALTER, DROP для определения структуры);
- Язык манипулирования данными (SELECT, INSERT, UPDATE, DELETE для работы с содержимым);
- Язык управления данными (GRANT, REVOKE для прав доступа).
Автор подчеркивает непроцедурный характер SQL: программист описывает что нужно получить, а оптимизатор определяет как это сделать.
2. Типы данных и создание схемы
Детально разбираются типы данных в MySQL, Oracle и SQL Server с таблицей соответствий. Символьные типы CHAR для фиксированной длины, VARCHAR для переменной длины до 255 символов, TEXT и его варианты TINYTEXT, MEDIUMTEXT, LONGTEXT для больших текстов. Числовые типы разделяются на целочисленные (TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT) и вещественные (FLOAT, DOUBLE) с указанием точности и масштаба.
3. Запросы и соединения таблиц
В книге есть множество примеров соединений данных из нескольких таблиц:
- Внутреннее соединение (INNER JOIN) возвращает только совпадающие строки из обеих таблиц.
- Внешние соединения (LEFT, RIGHT) сохраняют все строки из одной таблицы, дополняя NULL для несовпадающих из другой.
- Перекрестное соединение (CROSS JOIN) создает декартово произведение всех комбинаций строк.
Автор показывает соединение трех и более таблиц, использование подзапросов в FROM как виртуальных таблиц, самосоединения для иерархических данных.
4. Группировка, агрегация и аналитические функции
Аналитические функции (оконные) из главы 16 вычисляют значения по набору строк, связанных с текущей строкой, без сворачивания результата. Функции ранжирования ROW_NUMBER, RANK, DENSE_RANK присваивают номера в пределах окна. LAG и LEAD обращаются к предыдущим и следующим строкам для расчета изменений.
Окна данных определяются через PARTITION BY для группировки и ORDER BY для сортировки. Рамки окна (ROWS BETWEEN) ограничивают диапазон строк для вычисления скользящих средних и накопительных сумм.
5. Подзапросы и условная логика
Рассматриваются типы подзапросов. Есть примеры коррелированных и некоррелированных подзапросов:
- Некоррелированные подзапросы выполняются один раз независимо от внешнего запроса и возвращают скалярное значение, одностолбцовый или многостолбцовый результат;
- Коррелированные подзапросы выполняются для каждой строки внешнего запроса, обращаясь к столбцам из внешнего контекста. Оператор EXISTS проверяет наличие строк в подзапросе без их извлечения.
Автор показывает применение CASE для преобразования результирующих наборов, проверки существования данных, обработки NULL-значений, предотвращения деления на нуль, условных обновлений UPDATE с разной логикой для разных строк.
6. Транзакции, индексы и оптимизация
Транзакции обеспечивают атомарность операций: либо все изменения фиксируются COMMIT, либо откатываются ROLLBACK. Автор разбирает блокировки для многопользовательского доступа: блокировки чтения предотвращают изменения, блокировки записи блокируют чтение и изменение.
Гранулярность блокировок варьируется от строк до таблиц. MySQL поддерживает разные движки хранения InnoDB, MyISAM с различной поддержкой транзакций. Точки сохранения (SAVEPOINT) позволяют частичный откат транзакции.
Примеры и кейсы
Все примеры построены на учебной базе данных Sakila, схеме проката DVD с таблицами film, actor, customer, rental, payment. Это демонстрационный датасет, специально разработанный для обучения SQL, а не реальные бизнес-кейсы. Задачи включают выборку фильмов по категориям, расчет выручки по магазинам, анализ активности клиентов, построение рейтингов актеров.
Книга содержит схемы таблиц, ER-диаграммы связей, таблицы с результатами запросов, но минимум визуализаций. Баланс сильно смещен в сторону кода SQL: каждая концепция иллюстрируется 5-10 примерами запросов с подробными комментариями. Инструменты актуальны: MySQL 8.0, Oracle Database 19c, SQL Server 2019, хотя основной синтаксис SQL стабилен десятилетиями.
Полезность книги
Полнота раскрытия определяется фокусом на классическом SQL: реляционные концепции и традиционные СУБД описаны исчерпывающе, современные подходы к данным даны обзорно.
Что раскрыто хорошо?
- Соединения таблиц разобраны через механику выполнения с объяснением декартова произведения, различий INNER, LEFT, RIGHT, CROSS JOIN, самосоединений и использования подзапросов в FROM, что дает понимание работы оптимизатора, а не только синтаксиса.
- Аналитические функции из главы 16 детально описаны с примерами ROW_NUMBER, RANK, DENSE_RANK, LAG, LEAD, определением окон через PARTITION BY и ORDER BY, рамками ROWS BETWEEN для скользящих агрегатов, что весьма ценно для изучения временных рядов и трендового анализа.
- Различия реализаций SQL между MySQL, Oracle и SQL Server показаны в каждой главе через сравнительные таблицы функций, особенностей синтаксиса, механизмов хранения, что позволяет писать переносимый код или быстро адаптироваться при смене СУБД.
- Транзакции и блокировки объяснены через многопользовательские сценарии с примерами взаимоблокировок, уровней изоляции, точек сохранения, каскадных обновлений внешних ключей, что необходимо для проектирования надежных систем без потерь данных.
Что раскрыто плохо?
- Оптимизация производительности упомянута фрагментарно без методологии: нет разбора EXPLAIN-планов выполнения, статистики запросов, профилирования узких мест, техник перестройки запросов для использования индексов, что оставляет читателя беспомощным при медленных запросах на реальных объемах.
- Работа с большими данными в главе 17 дана на уровне концепций секционирования, шардинга, кластеризации без конкретных примеров настройки партиций по диапазонам, хешам, спискам, отсечения разделов в запросах, миграции данных между партициями.
- Хранимые процедуры, триггеры, функции не рассмотрены, хотя они критичны для бизнес-логики в БД: нет примеров PL/SQL в Oracle, Transact-SQL в SQL Server, процедурных расширений MySQL для автоматизации операций и обеспечения согласованности данных.
Вердикт
Ключевая ценность данной книги состоит в систематическом охвате SQL от реляционной теории до практических техник с параллельным сравнением трех основных СУБД в одном источнике. Это одно из немногих руководств, которые так детально разбирают различия реализации аналитических функций, индексов, транзакций между MySQL, Oracle и SQL Server с готовыми примерами для каждой платформы.
Книга стоит прочтения для формирования фундаментального понимания SQL и реляционных баз данных. Читатель получит готовые паттерны запросов для типовых задач выборки, группировки, соединений, понимание работы оптимизатора и индексов, навыки проектирования нормализованных схем с ограничениями целостности, что закрывает 80% потребностей разработки приложений с SQL.
Приобрести книгу можно здесь: https://www.labirint.ru/books/811526/