Введение. 5
Глава 1. Историческая справка. 10
1.1. Стандарты. 10
1.2. Структура SQL. 16
Глава 2. Пример БД «Ресторан». 20
2.1. Описание. 20
2.2. Диаграмма. 21
2.3. Данные в таблицах. 22
Глава 3. Выборка данных. 25
3.1. Оператор SELECT. Синтаксис. 25
3.2. Примеры запросов с использованием единственной таблицы. 28
3.2.1. Выборка без использования фразы WHERE. 28
3.2.1.1. Простейшие примеры. 28
3.2.1.2. Исключение дубликатов (DISTINCT). 29
3.2.1.3. Выборка вычисляемых значений. 29
3.2.2. Выборка c использованием фразы WHERE. 31
3.2.2.1. Использование операторов сравнения. 31
3.2.2.2. Сравнение с NULL. 32
3.2.2.3. Использование BETWEEN. 33
3.2.2.4. Использование IN (NOT IN). 33
3.2.2.5. Использование LIKE. 34
3.2.2.6. Выборка с упорядочением. 36
3.2.3. Использование агрегатных функций для подведения итогов. 38
3.2.3.1. Агрегатные функции без использования фразы GROUP BY. 39
3.2.3.2. Фраза GROUP BY. 41
3.2.3.3. Раздел HAVING. 45
3.3. Примеры запросов с использованием нескольких таблиц. 47
3.3.1. Соединения «с условием WHERE». 47
3.3.2. Соединение таблиц с дополнительными условиями. 51
3.3.2.1. Соединение таблицы со своей копией. 52
3.4. Соединения нескольких таблиц, используя JOIN. 53
3.4.1. Внутреннее соединение. 54
3.4.2. Внешнее соединение. 55
3.4.2.1. Левое внешнее соединение. 55
3.4.2.2. Правое внешнее соединение. 56
3.4.2.3. Полное внешнее соединение. 57
3.4.2.4. Перекрёстное соединение. 58
3.4.3. Реальные примеры соединений. 59
Глава 4. Подзапросы и производные таблицы.. 64
4.1.Производная таблица. 64
4.2. Вложенные подзапросы.. 65
4.2.1 Простые вложенные подзапросы.. 66
4.2.2. Использование одной и той же таблицы во внешнем и вложенном подзапросе 69
4.2.3. Использование агрегатных функций в подзапросах. 70
4.2.4. Подзапросы в предложении HAVING. 71
4.3. Соотнесенные подзапросы. 72
4.4 Использование оператора EXISTS. 74
4.5. Использование операторов ANY и ALL. 75
4.6. Объединение запросов UNION. 79
4.6.1. UNION и устранение дубликатов. 81
4.6.2. Использование строк и выражений с UNION. 82
4.6.3. Использование UNION с ORDER BY. 83
4.6.4. Реализация внешнего полного соединения через запросы с UNION. 84
Глава 5. Функции ранжирования. 85
5.1. Функция ROW_NUMBER. 86
5.2. Функции RANK() и DENSE_RANK() 88
Глава 6. Использование PIVOT и UNPIVOT. 91
Глава 7. Операторы манипулирования данными. 97
7.1. Оператор INSERT для добавления одной записи. 97
7.2. Оператор INSERT для добавления набора записей. 99
7.3. Оператор DELETE. 100
7.4. Оператор UPDATE. 101
Глава 8. Представление. 103
Глава 9. Создание, изменение и удаление таблиц. 109
9.1. Оператор CREATE TABLE. 109
9.2. Изменение таблицы после того как она была создана (ALTER TABLE). 122
9.3. Удаление таблицы (DROP TABLE). 124
9.4. Операторы создания и удаления индексов. 125
9.5. Понятие домена. 127
Глава 10. Обобщенные табличные выражения (СТЕ). 128
10.1. Представления, производные таблицы и выражения CTE. 128
10.2. Рекурсивные запросы. 133
10.3. Деревья без рекурсии. 139
10.4. Пример использования СТЕ для решения задачи Коммивояжера. 141
Глава 11. Этапы выполнения команды SQL. 147
11.1. Оптимизация запросов. 148
Приложение 1. Реализация реляционной алгебры средствами оператора SELECT (Реляционная полнота SQL). 157
Рекомендуемая литература. 161