ГЛАВА 1. SQL для всех. Основы реляционных баз данных....22
1.1. ЗАЧЕМ НУЖЕН SQL....23
SQL —это мост между вами и миром данных....24
SQL проще, чем кажется?....25
1.2. ИСТОКИ И РОЖДЕНИЕ SQL....25
1.3. СТАНДАРТЫ И ДИАЛЕКТЫ....26
1.4. ТАК ЧТО ЖЕ ВЫБРАТЬ?....27
1.5. СИСТЕМНЫЕ ТРЕБОВАНИЯ....29
1.6. УСТАНОВКА И ПОДКЛЮЧЕНИЕ....30
1.6.1. MS SQL Server....30
1.6.2. MySQL....32
Что надо скачать?....32
1.6.3. PostgreSQL....33
1.6.4. Альтернативные графические оболочки....34
1.7. ПОДКЛЮЧЕНИЕ К БАЗЕ, ПЕРВЫЙ ЗАПРОС....35
1.7.1. Подключение к MS SQL Server....36
1.7.2. Подключение к MySQL....38
Подключение через командную строку....38
1.7.3. Подключение к PostgreSQL....39
ЧТО УЗНАЛИ И ЧЕМУ МЫ НАУЧИЛИСЬ?....41
ГЛАВА 2. Типы данных....44
2.1. ПОНЯТИЕ ТИПА ДАННЫХ....45
Почему важно знать размер данных?....45
2.2. ТИПЫ ДЛЯ ЦЕЛЫХ ЧИСЕЛ....46
О знаковых и беззнаковых целых в MySQL....46
2.3. ТИПЫ ДЛЯ ДЕЙСТВИТЕЛЬНЫХ ЧИСЕЛ....47
Как быть, если нужна абсолютная точность?....48
2.4. ТИПЫ ДЛЯ ТЕКСТА....50
CHAR(n) / NCHAR(n)....51
CHARACTER VARYING(n) / VARCHAR(n) / NVARCHAR(n)....51
2.4.1. Про кодировки и Unicode....51
Рекомендации....52
2.4.2. Collation, или головная боль разработчика....53
2.5. ДАТА И ВРЕМЯ....54
2.6. ЛОГИЧЕСКИЙ ТИП ДАННЫХ (BOOLEAN)....55
2.7. NULL: ОТСУТСТВИЕ ЗНАЧЕНИЯ....56
2.8. ДРУГИЕ ТИПЫ ДАННЫХ....57
Специализированные типы: для нестандартных задач....57
2.9. ЧТО ДАЛЬШЕ?....58
2.10. ПРИЛОЖЕНИЕ К ГЛАВЕ 2: ТИПЫ ДАННЫХ СТАНДАРТА SQL....59
ГЛАВА 3. Основы проектирования баз данных на практике....62
3.1. ТАБЛИЧНОЕ ПРЕДСТАВЛЕНИЕ....63
3.2. ПРИМЕР 1. ИНТЕРНЕТ-МАГАЗИН. НОРМАЛИЗАЦИЯ....64
Как распознать ненормализованные данные?....65
3.3. ФОРМЫ НОРМАЛИЗАЦИИ....65
Первая нормальная форма (1NF)....66
Вторая нормальная форма (2NF)....66
Третья нормальная форма (3NF)....66
А все ли мы учли?....68
3.4. СОЗДАНИЕ БАЗЫ ДАННЫХ, ПРОЕКТИРОВАНИЕ ТАБЛИЦ....69
3.5. CREATE TABLE....76
3.5.1. О верхнем и нижнем регистре....77
MySQL....78
PostgreSQL....78
MS SQL Server....79
3.5.2. Работа в графических оболочках....81
3.6. ДОБАВЛЯЕМ ОТНОШЕНИЯ, ОГРАНИЧЕНИЯ И ВНЕШНИЕ КЛЮЧИ....82
3.6.1. Ссылочная целостность....85
Как это работает "под капотом"?....86
3.6.2. Автонумерация. Умные идентификаторы....88
MySQL....88
PostgreSQL....90
Microsoft SQL Server....92
3.6.3. Какие еще бывают ограничения?....94
UNIQUE....94
DEFAULT....95
CHECK....95
Когда что использовать?....95
3.6.4. Вычислимые столбцы....96
3.7. ПРИМЕР 2. ФИТНЕС-КЛУБ....97
3.7.1. Нормализация....99
3.7.2. Все ли мы учли?....101
3.7.3. Подбираем типы данных и создаем таблицы....101
ЧТО УЗНАЛИ И ЧЕМУ МЫ НАУЧИЛИСЬ?....104
ГЛАВА 4. Вставка, вывод и чтение данных....106
4.1. ДОБАВЛЕНИЕ ДАННЫХ. ОСНОВЫ....107
4.1.1. Простая вставка. INSERT на примере Интернет-магазина....107
4.1.2. Массовое добавление данных....110
MySQL....111
PostgreSQL....112
MS SQL....112
4.2. ЧТЕНИЕ ДАННЫХ ИЗ БАЗЫ. SELECT....113
4.2.1. Псевдонимы столбцов (ALIAS)....115
4.3. ФИЛЬТРАЦИЯ ВЫВОДА. WHERE....115
4.3.1. Операторы сравнения....116
4.3.2. Логические операторы....117
4.3.3. Поиск по шаблону. Оператор LIKE....120
4.3.4. Поиск по сложному шаблону....122
4.3.5. Условный вывод с оператором CASE....124
4.3.6. Приоритет операторов....127
4.4. НЕЯВНОЕ АВТОМАТИЧЕСКОЕ ПРИВЕДЕНИЕ ТИПОВ В SQL....128
Сравнение разных типов....129
Арифметические операции....129
4.4.1. Преобразование даты в строку и обратно....130
4.4.2. Особенности СУБД....131
MySQL....131
PostgreSQL....131
SQL Server....132
4.4.3. Потенциальные риски потери данных....132
4.5. ПОСТРАНИЧНЫЙ ВЫВОД, ОГРАНИЧЕНИЕ ВЫВОДА, СОРТИРОВКА....133
4.5.1. Сортировка. ORDER BY....133
MySQL, MS SQLServer....136
PostgreSQL....136
4.5.2. Особенности сортировки NULL....137
4.5.3. Использование колляции при сортировке....137
4.5.4. Постраничный вывод....140
Вопросы производительности и советы....143
ЧТО УЗНАЛИ И ЧЕМУ МЫ НАУЧИЛИСЬ?....143
ГЛАВА 5. Объединение данных. Работа с несколькими таблицами....146
5.1. ЕЩЕ НЕМНОГО О ПРЕИМУЩЕСТВАХ НОРМАЛИЗАЦИИ НА ПРИМЕРЕ ФИТНЕС-КЛУБА....147
Примечание о вставке данных....151
5.2. ПРОСТОЕ ОБЪЕДИНЕНИЕ....152
5.2.1. Как присоединять таблицу....152
5.2.2. Присоединение нескольких таблиц....157
5.2.3. Использование псевдонимов таблиц (aliases)....158
5.3. ВИДЫ ОБЪЕДИНЕНИЙ НА ПРИМЕРЕ СИСТЕМЫ РЕГИСТРАЦИИ В АЭРОПОРТУ....159
5.3.1. Внутреннее объединение INNER JOIN....159
5.3.2. Левое внешнее объединение LEFT OUTER JOIN....160
5.3.3. Правое внешнее объединение RIGHT OUTER JOIN....164
5.3.4. Полное объединение (FULL OUTER JOIN)....165
5.3.5. Перекрестное объединение CROSS JOIN....166
5.3.6. Слияние (UNION и UNION ALL)....168
5.3.7. Полная карта объединений....170
5.3.8. Порядок объединений, или как ничего не потерять....172
Вариант 1....172
Вариант 2....173
ЧТО УЗНАЛИ И ЧЕМУ МЫ НАУЧИЛИСЬ?....174
ПРИЛОЖЕНИЕ К ГЛАВЕ 5. ВАРИАНТЫ РЕШЕНИЯ ЗАДАНИЙ....175
ГЛАВА 6. Группировка данных и агрегатные функции....178
6.1. ОСНОВЫ АНАЛИТИКИ НА ПРИМЕРЕ РЫБОЛОВЕЦКОЙ КОМПАНИИ....179
6.2. АГРЕГАТНЫЕ ФУНКЦИИ....182
6.2.1. DISTINCT — вывод уникальных записей....182
6.2.2. COUNT — подсчет количества записей....183
6.2.3. SUM — сумма....184
6.2.4. MIN/MAX — минимальное и максимальное значения....184
6.2.5. AVG — среднее значение....185
6.2.6. COALESCE — замещение NULL....186
6.3. ГРУППИРОВКА РЕЗУЛЬТАТОВ GROUP BY....186
6.4. ФИЛЬТРАЦИЯ РЕЗУЛЬТАТОВ ПО ГРУППАМ — HAVING....189
6.5. НЕКОТОРЫЕ НЕСТАНДАРТНЫЕ АГРЕГАТНЫЕ ФУНКЦИИ В РАЗНЫХ СУБД....191
6.5.1. GROUP_CONCAT (MySQL)/STRING_AGG (PostgreSQL/MySQL)....192
6.5.2. STDDEV_POP / STDEVP....193
6.5.3. STDEV_SAMP I STDEV....193
6.5.4. VAR_SAMP / VAR....193
6.5.5. PostgreSQL: WITHIN GROUP и PERCENTILE_CONT/ PERCENTILE_DISC....194
ЧТО УЗНАЛИ И ЧЕМУ МЫ НАУЧИЛИСЬ?....195
ГЛАВА 7. Подзапросы и обобщённые табличные выражения (СТЕ)....196
7.1. ДАННЫЕ НА ОСНОВАНИИ ДРУГИХ ДАННЫХ. ПРАКТИЧЕСКИЙ ПРИМЕР КОМПЬЮТЕРНОЙ ИГРЫ....197
7.2. ПОДЗАПРОСЫ....200
7.2.1. Подзапрос, вложенный в SELECT....200
7.2.2. Подзапрос, вложенный в WHERE....201
7.2.3. Подзапрос, вложенный в FROM....201
7.2.4. Коррелируемый подзапрос....202
7.2.5. Проверка на наличие в наборе значений IN....203
7.2.6. Проверка на условие с наборами значений ANY /ALL....204
7.2.7. Быстрая проверка наличия WHERE EXISTS....205
7.2.8. Когда использовать подзапросы....207
7.3. ПРОБЛЕМЫ ПОДЗАПРОСОВ....208
7.3.1. Сложность для восприятия....208
7.3.2. Повторяющаяся логика....208
7.3.3. Производительность....209
7.4. ОБОБЩЕННЫЕ ТАБЛИЧНЫЕ ВЫРАЖЕНИЯ....209
7.4.1. Решение неэффективности подзапросов....209
7.4.2. Как это работает....210
7.4.3. Простые СТЕ....211
7.4.4. Рекурсия в СТЕ....212
7.4.5. Глубина рекурсии и опасность петель....216
7.4.6. Техники обнаружения петель в разных СУБД....218
7.4.7. Где рекурсия может быть полезна, а где — вредна....222
ЧТО УЗНАЛИ И ЧЕМУ МЫ НАУЧИЛИСЬ?....223
ГЛАВА 8. Оконные функции. Анализируем данные....226
8.1. ДАННЫЕ В КОНТЕКСТЕ "ОКНА". ПРИМЕР МОНИТОРИНГА СОСТОЯНИЯ ПАЦИЕНТА В БОЛЬНИЦЕ....227
8.2. ЧТО ТАКОЕ ОКОННЫЕ ФУНКЦИИ....229
8.2.1. Синтаксис....229
8.2.2. Агрегатные функции: SUM, AVG, COUNT, MAX, MIN....232
8.2.3. Ранжирующие функции: ROW_NUMBER, RANK, DENSE_RANK....235
Когда какую функцию использовать?....237
8.2.4. Функции распределения / относительного ранга: NTILE, PERCENT_RANK, CUME_DIST....238
PERCENT_RANK....238
CUME_DIST....239
NTILE(n)....240
8.2.5. Аналитические функции: LAG, LEAD, FIRST_VALUE, LAST_VALUE....241
LAG — доступ к предыдущим данным....242
LEAD — доступ к последующим данным....243
FIRST_VALUE — первое значение окна....244
LAST_VALUE — последнее значение окна....245
8.3. ВОПРОСЫ ПРОИЗВОДИТЕЛЬНОСТИ И АНТИПАТТЕРНЫ....245
8.3.1. Вложенные оконные функции....245
8.3.2. ROWS вместо RANGE....246
8.3.3. Фильтрация до оконных функций....247
8.3.4. Индексы по столбцам PARTITION BY и ORDER BY....247
8.3.5. Антипаттерн: избыточное секционирование....248
8.3.6. Антипаттерн: оконные функции вместо простых агрегатов....248
ЧТО УЗНАЛИ И ЧЕМУ МЫ НАУЧИЛИСЬ?....248
ГЛАВА 9. Изменение и удаление данных....250
9.1. МАНИПУЛЯЦИЯ ДАННЫМИ НА ПРИМЕРЕ ТАКСОПАРКА....251
9.2. ЕЩЕ НЕМНОГО О ВСТАВКЕ ДАННЫХ....253
9.2.1. Вставка данных из подзапроса....253
9.2.2. Возврат данных при добавлении....256
Microsoft SQL Server (OUTPUT)....256
PostgreSQL (RETURNING)....257
MySQL....258
9.3. ИЗМЕНЕНИЕ ДАННЫХ....258
9.3.1. Простое изменение....259
9.3.2. О важности WHERE....260
9.3.3. Обновление данных из подзапроса/СТЕ....261
9.3.4. Обновление данных через присоединение JOIN....263
Microsoft SQL Server....263
MySQL....264
PostgreSQL....264
9.4. РАЗРЕШЕНИЕ КОНФЛИКТОВ С ОГРАНИЧЕНИЯМИ....265
9.4.1. Техника UPSERT....265
Microsoft SQL Server....266
MySQL....266
PostgreSQL....268
9.4.2. Объединение таблиц (MERGE)....269
9.5. УДАЛЕНИЕ ДАННЫХ....272
9.5.1. Простое удаление DELETE....272
9.5.2. Удаление по данным подзапроса или СТЕ....273
9.5.3. Удаление через присоединение....274
9.6. КОНТРОЛЬ ЦЕЛОСТНОСТИ ПРИ УДАЛЕНИИ ДАННЫХ....274
9.6.1. Действия ON DELETE....275
9.6.2. Таблица сравнения действий....277
9.7. ПОДХОДЫ К ХРАНЕНИЮ НЕВОСТРЕБОВАННЫХ ДАННЫХ....279
9.7.1. Немедленное удаление (IMMEDIATE DELETE)....279
9.7.2. "Мягкое" удаление (SOFT DELETE)....280
9.7.3. Отсроченное удаление (DELAYED DELETE)....280
9.7.4. Постоянное хранение (NO DELETE)....281
9.8. ПРОИЗВОДИТЕЛЬНОСТЬ ЗАПРОСОВ UPDATE И DELETE....281
9.8.1. Временное отключение проверок и триггеров....281
9.8.2. Дробление операций на части....283
Microsoft SQL Server....283
MySQL....283
PostgreSQL....283
9.8.3. Дополнительные рекомендации по производительности....284
ЧТО УЗНАЛИ И ЧЕМУ МЫ НАУЧИЛИСЬ?....284
ГЛАВА 10. Индексы и оптимизация. Улучшаем производительность....286
10.1. ЧТО ТАКОЕ ИНДЕКС И ЗАЧЕМ ОН НУЖЕН?....287
10.2. ВИДЫ ИНДЕКСОВ....288
10.3. ИДЕНТИФИКАТОРЫ СТРОК В СУБД....289
10.4. ТИПЫ ИНДЕКСОВ В РАЗНЫХ СУБД....291
10.4.1. MS SQL Server....292
10.4.2. MySQL (InnoDB)....294
10.4.3. PostgreSQL....295
10.4.4. Обобщенная информация по индексам для разных СУБД....296
10.5. КАК ИНДЕКСЫ УСКОРЯЮТ ЗАПРОСЫ....298
10.5.1. Генерация больших объемов данных....298
Microsoft SQL Server....304
MySQL....305
PostgreSQL....306
10.5.2. Медленные запросы....307
Запрос 1. Количество посещений и средняя скидка для регулярных пользователей....307
Запрос 2. Разные пользователи с одинаковым IP....309
Анализ рефералов по группам....310
10.5.3. Добавляем индексы....312
Запрос 1 (количество посещений и средняя скидка)....312
Запрос 2 (общие IP-адреса для разных пользователей)....313
Запрос 3 (статистика посещений по реферальным группам)....314
10.5.4. Особенности синтаксиса....316
MS SQL Server — управление заполняемостью страниц....317
MySQL — префиксные индексы....319
MySQL, PostgreSQL— выбор типа индекса....320
Построение индекса без блокировки таблицы в PostgreSQL....320
Альтернативы для других СУБД....321
10.5.5. Фрагментация индексов и их перестройка....321
MS SQL Server....321
MySQL....323
PostgreSQL....324
10.5.6. Удаление и модификация индексов....326
10.6. АНАЛИЗ ПЛАНОВ ВЫПОЛНЕНИЯ....327
10.6.1. Планировщик запросов....327
10.6.2. Получение плана выполнения....328
MS SQL Server....328
MySQL....331
PostgreSQL....333
10.6.3. Как читать план выполнения?....333
Операции доступа к данным....334
Операции соединения (JOIN)....335
Операции сортировки и агрегации....337
10.7. ОПТИМИЗАЦИЯ ЗАПРОСОВ С ПОМОЩЬЮ ИНДЕКСОВ НА ПРАКТИКЕ....337
10.7.1. MS SQL Server....338
1-й этап. Подготовка СТЕ....339
2-й этап. Соединение с основной таблицей....339
3-й этап. Соединение с таблицей users....340
Финальный этап. Агрегация и сортировка....340
СТЕ....341
Присоединение СТЕ....341
Присоединение users....342
Финальный этап....342
10.7.2. MySQL....342
Этап 1. Обработка СТЕ....342
Этап 2. Присоединение СТЕ....343
Этап 3. Агрегация и сортировка....343
10.7.3. PostgreSQL....345
Ресурсоемкая сортировка....346
10.8. ДИАГНОСТИКА ПРОБЛЕМ ПРОИЗВОДИТЕЛЬНОСТИ....349
10.8.1. Неэффективные индексы....349
10.8.2. Статистика и ее роль....351
10.9. ЛУЧШИЕ ПРАКТИКИ И АНТИПАТТЕРНЫ....351
10.9.1. Рекомендации....352
10.9.2. Чего избегать....352
ЧТО УЗНАЛИ И ЧЕМУ МЫ НАУЧИЛИСЬ?....353
ГЛАВА 11. Представления (Views)....354
11.1. ЗАЧЕМ НУЖНЫ ПРЕДСТАВЛЕНИЯ?....355
11.2. СОЗДАНИЕ ТЕСТОВЫХ ДАННЫХ. ПРИМЕР РАСПРЕДЕЛЕНИЯ ГОНОРАРОВ И ВОЗНАГРАЖДЕНИЙ....357
11.3. РАБОТА С ПРЕДСТАВЛЕНИЯМИ....358
11.3.1. Синтаксис создания и абстракция сложности....359
11.3.2. Безопасность и логическое разделение данных....360
11.3.3. Обновляемые представления....361
11.3.4. Материализованные представления....362
11.4. КОГДА ПРЕДСТАВЛЕНИЯ МОГУТ МЕШАТЬ?....365
ЧТО УЗНАЛИ И ЧЕМУ МЫ НАУЧИЛИСЬ?....366
ГЛАВА 12. Транзакции, изоляция и блокировки....368
12.1. ПРИНЦИПЫ ACID....369
Atomicity (атомарность)....370
Consistency (Согласованность)....370
Isolation (Изолированность)....370
Durability (Долговечность)....370
12.2. ПРОЦЕСС ВЫПОЛНЕНИЯ ТРАНЗАКЦИИ....371
12.3. УРОВНИ ИЗОЛЯЦИИ ТРАНЗАКЦИЙ....372
12.4. РЕАЛИЗАЦИЯ УРОВНЕЙ ИЗОЛЯЦИИ В РАЗНЫХ СУБД. ПРИМЕР АВИАКАССЫ В ЧАС ПИК....374
12.4.1. Microsoft SQL Server....376
12.4.2. MySQL (InnoDB)....377
12.4.3. PostgreSQL....377
12.5. ПРАКТИЧЕСКАЯ РАБОТА С ТРАНЗАКЦИЯМИ. ПРИМЕР УПРОЩЕНОЙ БАНКОВСКОЙ СИСТЕМЫ....378
Задания для самостоятельной работы....381
12.6. БЛОКИРОВКИ....382
12.6.1. Виды блокировок....383
12.6.2. Как избегать взаимных блокировок?....385
12.6.3. Явное управление блокировками....386
12.6.4. Отключение блокировок (READ UNCOMMITTED)....389
12.6.5. Оптимистичная блокировка....390
ЧТО УЗНАЛИ И ЧЕМУ МЫ НАУЧИЛИСЬ?....392
ГЛАВА 13. Бизнес-логика. Хранимые процедуры и функции....394
13.1. СИНТАКСИС СОЗДАНИЯ....396
MS SQL Server....396
MySQL....397
PostgreSQL....398
13.2. ПЕРЕМЕННЫЕ....400
13.3. ПАРАМЕТРЫ....404
MS SQL Server....405
MySQL....405
PostgreSQL....405
13.4. ТИПЫ ПАРАМЕТРОВ, ФУНКЦИИ....406
13.4.1. Входные (IN), выходные (OUT) и смешанные (INOUT) параметры....406
Перегрузка в PostgreSQL....412
13.4.2. Функции....413
MS SQL Server....414
MySQL....415
PostgreSQL....417
13.4.3. Скалярные и табличные результаты....418
MS SQL Server....418
MySQL....418
PostgreSQL....419
13.5. ПРОВЕРКА УСЛОВИЙ, ВЕТВЛЕНИЯ....421
MS SQL Server....423
MySQL....424
PostgreSQL....425
13.6. ЦИКЛЫ....426
13.6.1. Организация циклов в разных СУБД....426
13.6.2. Досрочный выход из цикла, пропуск итерации....429
MS SQL Server....430
MySQL....430
PostgreSQL....431
13.6.3. Модификация процедуры записи на прием....431
MS SQLServer....432
MySQL....433
PostgreSQL....434
13.6.4. Курсоры. Построчная обработка запроса....435
13.6.5. Пример поднятия цен в книжном магазине....436
MS SQL Server....438
MySQL....440
PostgreSQL....441
13.7. ОБРАБОТКА ОШИБОК....443
13.7.1. MS SQL Server....444
13.7.2. MySQL....445
13.7.3. PostgreSQL....446
13.8. ТРИГГЕРЫ....448
13.8.1. Создание триггера....449
MS SQL Server....450
MySQL....451
PostgreSQL....452
13.8.2. Изменение триггеров....453
13.8.3. Вопросы производительности....453
MS SQL Server....454
MySQL....454
PostgreSQL....454
13.8.4. Советы....455
13.9. ПЛЮСЫ И МИНУСЫ ПЕРЕНОСА БИЗНЕС-ЛОГИКИ В СУБД....455
13.9.1. Что вы получаете, реализуя бизнес-логику в СУБД....455
13.9.2. Что плохого вы получите "в нагрузку....456
13.9.3. Переносить или не переносить?....457
ГЛАВА 14. Безопасность данных и управление пользователями....460
14.1. КЛЮЧЕВЫЕ КОНЦЕПЦИИ....462
14.1.1. Принцип наименьших привилегий....462
14.1.2. Субъекты безопасности....462
14.1.3. Схемы (Schemas)....464
14.2. ПРЕДОПРЕДЕЛЕННЫЕ (СИСТЕМНЫЕ) РОЛИ....465
14.3. ТИПЫ ПРИВИЛЕГИЙ. ЧТО МОЖНО РАЗРЕШИТЬ....466
14.4. УПРАВЛЕНИЕ ПОЛЬЗОВАТЕЛЯМИ И ПАРОЛЯМИ....467
14.4.1. Основные команды....467
MS SQL Server....467
MySQL....468
PostgreSQL....469
14.4.2. Смена пароля....470
MS SQL Server....470
MySQL....470
PostgreSQL....470
14.5. УПРАВЛЕНИЕ РОЛЯМИ....470
14.6. ПРЕДОСТАВЛЕНИЕ И ОТЗЫВ ПРИВИЛЕГИЙ....471
14.6.1. Правила указания объектов....472
MS SQLServer....472
MySQL....473
PostgreSQL....474
14.6.2. Наследование ролей в PostgreSQL....476
14.6.3. Антипаттерны....476
14.7. АУДИТ И ПРОФИЛАКТИКА....477
14.7.1. SQL Server....477
sys.database_role_members....478
sys.database_principals....478
14.7.2. MySQL....480
14.7.3. PostgreSQL....481
ЧТО УЗНАЛИ И ЧЕМУ МЫ НАУЧИЛИСЬ?....482
Заключение....484
Куда двигаться дальше?....485
Смежные технологии и направления....486
ГЛОССАРИЙ ТЕРМИНОВ....488
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ ИНФОРМАЦИИ....510
У вас в руках — исчерпывающий гид по языку SQL, призванный помочь не просто освоить синтаксис, а глубоко понять принципы работы с данными и стать востребованным специалистом. Вы начнёте с абсолютного нуля, и каждый шаг — от установки СУБД до сложных запросов, — будет подкреплён практическими примерами (интернет-магазин, фитнес-клуб, банковская система, компьютерная игра, таксопарк, система регистрации в аэропорту, мониторинг состояния пациента в больнице и т.п.) и детальными объяснениями.
Понимая, что в мире не существует идеальной СУБД, книга разбирает каждую концепцию на примере трёх самых популярных систем: MySQL, PostgreSQL и Microsoft SQL Server. Такой подход позволит вам на практике увидеть их сильные и слабые стороны и избавиться от страха перед «незнакомой» средой, став по-настоящему гибким специалистом.
Особое внимание уделено «больным» темам, которые часто остаются за кадром в учебниках, но критически важны в работе: тонкости типов данных, кодировок и колляций, механизмы обеспечения целостности, транзакции, уровни изоляции и блокировки. Вы поймёте не только «как это работает», но и «почему это работает именно так». Также книга выходит за рамки чистого SQL и рассматривает архитектурные вопросы: стратегии «мягкого» удаления, плюсы и минусы переноса бизнес-логики в хранимые процедуры, принципы безопасности и управления доступом и т.д.
Отдельный фокус сделан на проектировании таблиц, индексах и анализе планов выполнения запросов. Вы научитесь писать не только рабочие, но и эффективные запросы. Именно это умение — ключевой навык в реальной работе и главное отличие любителя от профессионала.
Эта книга является не только идеальным стартом для начинающих разработчиков, аналитиков и будущих администраторов БД, но также будет полезна и специалистам, уже работающим с СУБД: помимо глубоких теоретических знаний, книга даёт настоящую прикладную уверенность в работе с тремя основными СУБД современного рынка.