Введение. 3
Глава 1. Историческая справка. 9
1.1. Стандарты. 9
1.2. Структура SQL. 15
Глава 2. Пример БД «Ресторан». 19
2.1. Описание. 19
2.2. Диаграмма. 21
2.3. Данные в таблицах. 21
Глава 3. Выборка данных. 26
3.1. Оператор SELECT. Синтаксис. 26
3.2. Примеры запросов с использованием единственной таблицы. 29
3.2.1. Выборка без использования фразы WHERE. 29
3.2.1.1. Простейшие примеры. 29
3.2.1.2. Исключение дубликатов (DISTINCT). 30
3.2.1.3. Выборка вычисляемых значений. 31
3.2.2. Выборка c использованием фразы WHERE. 33
3.2.2.1. Использование операторов сравнения. 33
3.2.2.2. Сравнение с NULL. 34
3.2.2.3. Использование BETWEEN. 35
3.2.2.4. Использование IN (NOT IN). 36
3.2.2.5. Использование LIKE. 37
3.2.2.6. Выборка с упорядочением. 39
3.2.3. Использование агрегатных функций для подведения итогов. 42
3.2.3.1. Агрегатные функции без использования фразы GROUP BY. 43
3.2.3.2. Фраза GROUP BY. 45
3.2.3.3. Раздел HAVING. 50
3.3. Примеры запросов с использованием нескольких таблиц. 52
3.3.1. Соединения «с условием WHERE». 52
3.3.2. Соединение таблиц с дополнительными условиями. 56
3.3.2.1. Соединение таблицы со своей копией. 57
3.4.
Соединения нескольких таблиц, используя JOIN. 58
3.4.1. Внутреннее соединение. 59
3.4.2. Внешнее соединение. 60
3.4.2.1. Левое внешнее соединение. 60
3.4.2.2. Правое внешнее соединение. 61
3.4.2.3. Полное внешнее соединение. 62
3.4.2.4. Перекрёстное соединение. 63
3.4.3. Реальные примеры соединений. 65
Глава 4. Подзапросы и производные таблицы 70
4.1.Производная таблица. 70
4.2. Вложенные подзапросы 72
4.2.1 Простые вложенные подзапросы 73
4.2.2. Использование одной и той же таблицы во внешнем и вложенном подзапросе 76
4.2.3. Использование агрегатных функций в подзапросах. 77
4.2.4. Подзапросы в предложении HAVING. 78
4.3. Соотнесенные подзапросы. 79
4.4 Использование оператора EXISTS. 82
4.5. Использование операторов ANY и ALL. 84
4.6. Объединение запросов UNION. 88
4.6.1. UNION и устранение дубликатов. 90
4.6.2. Использование строк и выражений с UNION. 91
4.6.3. Использование UNION с ORDER BY. 92
4.6.4. Реализация внешнего полного соединения через запросы с UNION. 93
Глава 5. Функции ранжирования. 94
5.1. Функция ROW_NUMBER. 95
5.2. Функции RANK() и DENSE_RANK() 98
Глава 6. Использование PIVOT и UNPIVOT. 102
Глава 7. Операторы манипулирования данными. 109
7.1. Оператор INSERT для добавления одной записи. 109
7.2. Оператор INSERT для добавления набора записей. 111
7.3. Оператор DELETE. 112
7.4. Оператор UPDATE. 113
Глава 8. Представление. 115
Глава 9. Создание, изменение и удаление таблиц. 121
9.1. Оператор CREATE TABLE 121
9.2. Изменение таблицы после того как она была создана (ALTER TABLE). 134
9.3. Удаление таблицы (DROP TABLE). 136
9.4. Операторы создания и удаления индексов. 136
Глава 10. Обобщенные табличные выражения (СТЕ). 140
10.1.Представления, производные таблицы и выражения CTE. 140
10.2.Рекурсивные запросы. 145
10.3.Деревья без рекурсии. 151
10.4.Пример использования СТЕ для решения задачи Коммивояжера. 156
Глава 11. Этапы выполнения команды SQL. 164
11.1. Оптимизация запросов. 165
Приложение 1. Реализация реляционной алгебры средствами оператора SELECT (Реляционная полнота SQL). 174
Рекомендуемая литература 178