Обзор книги «Изучаем SQL. Генерация, выборка и обработка данных» (А. Болье, 3-е изд.)

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

Книга решает проблему фрагментарного понимания SQL, когда разработчики знают базовые SELECT-запросы, но не владеют систематическим подходом к проектированию схем, оптимизации производительности и использованию продвинутых возможностей языка. Болье выстраивает знания от фундамента реляционной модели до прикладных техник работы с метаданными, транзакциями и аналитикой. Каждая глава заканчивается упражнениями для закрепления материала.

Целевая аудитория — разработчики приложений, работающих с базами данных, администраторы БД, аналитики данных от начального до среднего уровня. Книга не требует предварительного знания SQL, начинается с основ реляционной модели и постепенно усложняется. Предполагается базовое понимание программирования и опыт работы с командной строкой для установки MySQL и выполнения примеров.

Обложка книги "Изучаем SQL. Генерация, выборка и обработка данных"

Обложка книги «Изучаем 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: реляционные концепции и традиционные СУБД описаны исчерпывающе, современные подходы к данным даны обзорно.

Что раскрыто хорошо?

  1. Соединения таблиц разобраны через механику выполнения с объяснением декартова произведения, различий INNER, LEFT, RIGHT, CROSS JOIN, самосоединений и использования подзапросов в FROM, что дает понимание работы оптимизатора, а не только синтаксиса.
  2. Аналитические функции из главы 16 детально описаны с примерами ROW_NUMBER, RANK, DENSE_RANK, LAG, LEAD, определением окон через PARTITION BY и ORDER BY, рамками ROWS BETWEEN для скользящих агрегатов, что весьма ценно для изучения временных рядов и трендового анализа.
  3. Различия реализаций SQL между MySQL, Oracle и SQL Server показаны в каждой главе через сравнительные таблицы функций, особенностей синтаксиса, механизмов хранения, что позволяет писать переносимый код или быстро адаптироваться при смене СУБД.
  4. Транзакции и блокировки объяснены через многопользовательские сценарии с примерами взаимоблокировок, уровней изоляции, точек сохранения, каскадных обновлений внешних ключей, что необходимо для проектирования надежных систем без потерь данных.

Что раскрыто плохо?

  1. Оптимизация производительности упомянута фрагментарно без методологии: нет разбора EXPLAIN-планов выполнения, статистики запросов, профилирования узких мест, техник перестройки запросов для использования индексов, что оставляет читателя беспомощным при медленных запросах на реальных объемах.
  2. Работа с большими данными в главе 17 дана на уровне концепций секционирования, шардинга, кластеризации без конкретных примеров настройки партиций по диапазонам, хешам, спискам, отсечения разделов в запросах, миграции данных между партициями.
  3. Хранимые процедуры, триггеры, функции не рассмотрены, хотя они критичны для бизнес-логики в БД: нет примеров PL/SQL в Oracle, Transact-SQL в SQL Server, процедурных расширений MySQL для автоматизации операций и обеспечения согласованности данных.

Вердикт

Ключевая ценность данной книги состоит в систематическом охвате SQL от реляционной теории до практических техник с параллельным сравнением трех основных СУБД в одном источнике. Это одно из немногих руководств, которые так детально разбирают различия реализации аналитических функций, индексов, транзакций между MySQL, Oracle и SQL Server с готовыми примерами для каждой платформы.

Книга стоит прочтения для формирования фундаментального понимания SQL и реляционных баз данных. Читатель получит готовые паттерны запросов для типовых задач выборки, группировки, соединений, понимание работы оптимизатора и индексов, навыки проектирования нормализованных схем с ограничениями целостности, что закрывает 80% потребностей разработки приложений с SQL.

Приобрести книгу можно здесь: https://www.labirint.ru/books/811526/